函數(shù)調(diào)用限制
1、SQL語句中只能調(diào)用存儲(chǔ)函數(shù)(服務(wù)器端),而不能調(diào)用客戶端的函數(shù)
2、SQL只能調(diào)用帶有輸入?yún)?shù),不能帶有輸出,輸入輸出函數(shù)
3、SQL不能使用PL/SQL的特有數(shù)據(jù)類型(boolean,table,record等)
4、SQL語句中調(diào)用的函數(shù)不能包含INSERT,UPDATE和DELETE語句
1.function函數(shù)的語法如下:
create or replace function function_name (
argu1 [mode1] datatype1, --定義參數(shù)變量
argu2 [mode2] datatype2 --定義參數(shù)變量
) return datatype --定義返回的數(shù)據(jù)類型
is
begin
end;
執(zhí)行 var v1 varchar2(100)
exec :v1:=function_name
2.不帶任何參數(shù)的定義
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參數(shù)的
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;
執(zhí)行: SQL> var sal number
SQL> exec :sal:=get_sal('scott');
4.帶out參數(shù)的
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;
執(zhí)行: SQL> var job varchar2(20)
SQL> var dname varchar2(20)
SQL> exec :dname:=get_info('SCOTT',:job)
5.帶in out參數(shù)的
6.函數(shù)調(diào)用舉例
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;--執(zhí)行動(dòng)態(tài)的sql語句,執(zhí)行相似的一組語句
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;
調(diào)用方式如下:
SELECT TO_NUMBER(F_SYS_GETSEQID('SEQ_TERMTRADE_ID', V_PROVINCE_CODE)) INTO V_BATCH_ID FROM DUAL;
EXECUTE IMMEDIATE的說明:執(zhí)行動(dòng)態(tài)的sql語句。