Oracle 自定義函式寫法大全

2021-06-16 05:28:17 字數 4222 閱讀 8578

19-1:建立無引數的函式

create or replace function cur_datetime

return varchar2

isbegin

return to_char(sysdate,

'yyyy"年"mm"月"dd"日"hh24"時"mi"分"ss"秒"');

end;

/19-2:建立帶有輸入引數的函式

create or replace function get_sal(name varchar2)

return number

as  v_sal emp.sal%type;

begin

select sal into v_sal from emp where upper(ename)=upper(name);

return v_sal;

end;

/19-3:建立帶有輸出引數的函式

create or replace function get_info

(eno number,title out varchar2) return varchar2

as  name emp.ename%type;

begin

select ename,job into name,title from emp

where empno=eno;

return name;

end;

/19-4:建立帶有輸入輸出引數的函式

create or replace function get_upd_info

(eno number,sal_chg in out number) return varchar2

as  name emp.ename%type;

begin

update emp set sal=sal+sal_chg where empno=eno

returning ename,sal into name,sal_chg;

return name;

end;

/19-5:建立結果快取函式

create or replace function get_name(no varchar2)

return number result_cache relies_on(emp)

asv_name emp.ename%type;

begin

select ename into v_name from emp where empno=no;

return v_name;

end;

/19-6:呼叫無引數的函式

begin

dbms_output.put_line(cur_datetime);

end;

/19-7:呼叫帶有輸入引數的函式

begin

dbms_output.put_line('工資:'||get_sal('&name'));

end;

/19-8:呼叫帶有輸出引數的函式

declare

v_name emp.ename%type;

v_job emp.job%type;

begin

v_name:=get_info(&eno,v_job);

dbms_output.put_line('姓名:'||v_name||',崗位:'||v_job);

end;

/19-9:呼叫帶有輸入輸出引數的函式

declare

v_empno emp.empno%type;

v_name emp.ename%type;

v_salchg emp.sal%type;

begin

v_empno:=&eno;

v_salchg:=&incre;

v_name:=get_upd_info(v_empno,v_salchg);

dbms_output.put_line('姓名:'||v_name||',新工資:'||v_salchg);

end;

/19-10:使用位置傳遞為引數傳遞變數和資料

select get_sal('&name') 工資 from dual;

19-11:使用名稱傳遞為引數傳遞變數和資料

var salary number

exec :salary:=get_sal(name=>'&name')

19-12:使用組合傳遞為引數傳遞變數和資料

var name varchar2(10)

var sal_chg number

exec :sal_chg:=200

exec :name:=get_upd_info(&eno,:sal_chg)

print name sal_chg

19-13:在sql語句中呼叫pl/sql函式

select get_sal(name=>'scott') salary from dual;

19-14:使用異常處理

create or replace function get_sal(name varchar2)

return number

as  v_sal emp.sal%type;

begin

select sal into v_sal from emp

where upper(ename)=upper(name);

return v_sal;

exception

when no_data_found then

end;

/19-15:使用紀錄型別作為返回型別

create or replace function get_info

(eno number) return emp%rowtype

is  emp_record emp%rowtype;

begin

select * into emp_record from emp where empno=eno;

return emp_record;

exception

when no_data_found then

end;

/declare

emp_record emp%rowtype;

begin

emp_record:=get_info(&eno);

dbms_output.put_line('姓名:'||emp_record.ename||',部門號:'||emp_record.deptno);

end;

/19-16:使用集合型別作為返回型別

create or replace type ename_table_type is table of varchar2(10);

/create or replace function get_name

(dno number) return ename_table_type is

ename_table ename_table_type;

begin

select ename bulk collect into ename_table from emp where deptno=dno;

return ename_table;

exception

when no_data_found then

end;

/declare

ename_table ename_table_type;

begin

ename_table:=get_name(&dno);

for i in 1..ename_table.count loop

dbms_output.put_line('姓名:'||ename_table(i));

end loop;

end;

/19-17:刪除函式

drop function get_name;

19-18:顯示編譯錯誤

show errors

19-19:確定函式狀態

select object_name from user_objects where status='invalid' and object_type='function';

19-20:編譯函式

alter function get_info compile;

19-21:檢視函式**

select text from user_source where name='get_info';

Oracle自定義函式

語法如下 create or replace function function name argment type,argment type return return type 返回資料的型別 變數的申明,比如 stryuan varchar2 150 begin function body 函...

oracle 自定義函式

下面是乙個前輩寫的判斷是否是手機號的函式 create or replace function ismobile pmsg varchar2 return number isvprefix varchar2 20 vlen number begin vlen lengthb pmsg if vlen...

Oracle自定義函式

二 刪除自定義函式 三 應用經驗 在oracle資料庫中,為了實現特定的功能,可以自定義函式,就像c c 語言,除了系統的庫函式,程式設計師還會編寫很多自定義的函式。create or replace function 函式名 引數1 模式 資料型別,return 資料型別 as 定義區域性變數。變...