码迷,mamicode.com
首页 > 数据库 > 详细

oracle function用法(本文来自百度文库)

时间:2015-04-28 15:40:06      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

  

  函数调用限制

  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.函数调用举例

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语句。

 

oracle function用法(本文来自百度文库)

标签:

原文地址:http://www.cnblogs.com/iliuyuet/p/4462755.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!