oracle function用法

前端之家收集整理的这篇文章主要介绍了oracle function用法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

1.function函数的语法如下:

  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

    猜你在找的Oracle相关文章