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 定義區域性變數。變...