oracle function用法 -凯发k8网页登录

那些青春的岁月

  凯发k8网页登录-凯发天生赢家一触即发官网 :: 凯发k8网页登录首页 :: 联系 :: 聚合  :: 管理
  500 posts :: 0 stories :: 135 comments :: 0 trackbacks

函数调用限制
1、sql语句中只能调用存储函数(服务器端),而不能调用客户端的函数
2、sql只能调用带有输入参数,不能带有输出,输入输出函数
3、sql不能使用pl/sql的特有数据类型(boolean,table,record等)
4、sql语句中调用的函数不能包含insert,update和delete语句

1.function函数的语法如下:

      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

2.不带任何参数的定义

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;

3.带有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;

执行: sql> var sal number
sql> exec :sal:=get_sal('scott');

4.带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;

执行: sql> var job varchar2(20)
sql> var dname varchar2(20)
sql> exec :dname:=get_info('scott',:job)

5.带in out参数的

6.函数调用举例

create or replace function f_sys_getseqid(
    v_seqname           in varchar2,
    v_provincecode      in varchar2    --省编码
) return varchar2
is
    iv_date             varchar2(8);
    iv_seqname          varchar2(50);
    iv_sqlstr           varchar2(200);
    iv_seq              varchar2(8);
    iv_seqid            varchar2(16);
begin
    iv_seqname := lower(trim(v_seqname));
    iv_sqlstr := 'select '||iv_seqname||'.nextval from dual';
    execute immediate iv_sqlstr into iv_seq;--执行动态的sql语句,执行相似的一组语句
    if v_seqname = 'seq_funcrole_id' then
      iv_seqid:= 'ess' || lpad(iv_seq,5,'0');
    else
      select substrb(v_provincecode,1,2)||to_char(sysdate,'yymmdd') into iv_date from dual;
      iv_seqid:= iv_date || lpad(iv_seq,8,'0');
    end if;
    return iv_seqid;
exception
    when others then
    return null;
end;

  调用方式如下:

    select to_number(f_sys_getseqid('seq_termtrade_id', v_province_code)) into v_batch_id from dual;

   execute immediate的说明:执行动态的sql语句。

posted on 2012-08-12 20:42 abin 阅读(33145) 评论(2)     所属分类: oracle

feedback

# re: oracle function用法 2015-06-08 11:04
版本  回复  
  

# re: oracle function用法 2016-06-21 09:49
check  回复  
  


只有注册用户后才能发表评论。


网站导航:
              
相关文章:
 
网站地图