Oracle 自定义函数

函数
函数用于返回特定数据。执行时得找一个变量接收函数的返回值;
语法如下:     create or replace function function_name
(
argu1 [mode1] datatype1,
argu2 [mode2] datatype2,  ........
)
return datatype
is
begin

end;
执行  var v1 varchar2(100)
      exec :v1:=function_name
===============================================================================
不带任何参数
===============================================================================
create or replace function get_user return varchar2 is
  Result varchar2(50);
begin
  select username into Result from user_users;
  return(Result);
end get_user;
执行:
===============================================================================
带in参数的
===============================================================================
create or replace function get_sal(empname in varchar2) return number is
  Result number;
begin
  select sal into Result from emp where ename=empname;
  return(Result);
end get_sal;
执行: SQL> var sal number
SQL> exec :sal:=get_sal('scott');

===============================================================================
带out参数的函数
===============================================================================
create or replace function get_info(e_name varchar2,job out varchar2) return number is
  Result number;
begin
  select sal,job into Result,job from emp where ename=e_name;
  return(Result);
end get_info;

执行: SQL> var job varchar2(20)
SQL> var dname varchar2(20)
SQL> exec :dname:=get_info('SCOTT',:job)
===============================================================================
带in out参数的函数
===============================================================================
create or replace function result(num1 number,num2 in out number) return number is
  v_result number(6);
  v_remainder number;
begin
  v_result :=num1/num2;
  v_remainder :=mod(num1,num2);
  num2 :=v_remainder;
  return(v_result);
  Exception
    when zero_divide then
       raise_application_error(-20000,'不能除0');
end result;
执行: var result1 number;
      var result2 number;
      exec :result2:=30
      exec :result1:=result(100,:result2)

===============================================================================

你可能感兴趣的:(oracle,sql)