加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle function用法

发布时间:2020-12-12 15:47:01 所属栏目:百科 来源:网络整理
导读:函数调用限制 1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数 2、SQL只能调用带有输入参数,不能带有输出,输入输出函数 3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等) 4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE

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

1.function函数的语法如下:

[sql] view plain copy
  1. createorreplacefunctionfunction_name(
  2. argu1[mode1]datatype1,--定义参数变量
  3. argu2[mode2]datatype2--定义参数变量
  4. )returndatatype--定义返回的数据类型
  5. is
  6. begin
  7. end;

执行:

varv1varchar2(100)
  • exec:v1:=function_name

  • 2.不带任何参数的定义

    createorreplacefunctionget_user
  • returnvarchar2
  • Resultvarchar2(50);--定义变量
  • selectusernameintoResultfromuser_users;
  • return(Result);--返回值
  • endget_user;

  • 3.带有in参数的

    createorreplacefunctionget_sal(

  • empnameinvarchar2
  • )returnnumber
  • is
  • Resultnumber;
  • begin
  • selectsalintoResultfromempwhereename=empname;
  • return(Result);
  • end;
  • 执行:

    SQL>varsalnumber

  • SQL>exec:sal:=get_sal('scott');

  • 4.带out参数的

    createorreplacefunctionget_info(
  • e_namevarchar2,
  • joboutvarchar2
  • )returnnumber
  • Is
  • Resultnumber;
  • selectsal,jobintoResult,jobfromempwhereename=e_name;
  • return(Result);
  • end;
  • 执行: SQL>varjobvarchar2(20)
  • SQL>vardnamevarchar2(20)
  • SQL>exec:dname:=get_info('SCOTT',:job)

  • 5.带in out参数的

    6.函数调用举例

    createorreplacefunctionf_sys_getseqid(
  • v_seqnameINVARCHAR2,
  • v_provincecodeINVARCHAR2--省编码
  • )returnVarchar2
  • IS
  • iv_dateVARCHAR2(8);
  • iv_seqnameVARCHAR2(50);
  • iv_sqlstrVARCHAR2(200);
  • iv_seqVARCHAR2(8);
  • iv_seqidVARCHAR2(16);
  • BEGIN
  • iv_seqname:=LOWER(TRIM(v_seqname));
  • iv_sqlstr:='SELECT'||iv_seqname||'.nextvalFROMDUAL';
  • EXECUTEIMMEDIATEiv_sqlstrINTOiv_seq;--执行动态的sql语句,执行相似的一组语句
  • IFv_seqname='SEQ_FUNCROLE_ID'THEN
  • iv_seqid:='ESS'||LPAD(iv_seq,5,'0');
  • ELSE
  • SELECTsubstrb(v_provincecode,1,2)||TO_CHAR(SYSDATE,'yymmdd')INTOiv_dateFROMDUAL;
  • iv_seqid:=iv_date||LPAD(iv_seq,8,'0');
  • ENDIF;
  • RETURNiv_seqid;
  • EXCEPTION
  • WHENOTHERSTHEN
  • RETURNNULL;
  • END;
  • 调用方式如下:

    SELECTTO_NUMBER(F_SYS_GETSEQID('SEQ_TERMTRADE_ID',V_PROVINCE_CODE))INTOV_BATCH_IDFROMDUAL;
    EXECUTE IMMEDIATE的说明:执行动态的sql语句。


    转载自:http://www.blogjava.NET/stevenjohn/archive/2012/08/12/385324.html

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读