函数调用限制 1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数 2、SQL只能调用带有输入参数,不能带有输出,输入输出函数 3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等) 4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句
1.function函数的语法如下:
[sql]
view plain
copy
- createorreplacefunctionfunction_name(
- argu1[mode1]datatype1,
- argu2[mode2]datatype2
- )returndatatype
- is
-
- begin
- 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;
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 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|