語法如下:
create[or replace] function function_name
[(argment [ ] type,
argment [ ] type ]
return return_type //返回資料的型別
//變數的申明,比如:
//stryuan varchar2(150);
begin function_body //函式體
exception其它語句
end;
(1)in引數型別:表示輸入給函式的引數,該引數只能用於傳值,不能被賦值。
(2)out引數型別:表示引數在函式中被賦值,可以傳給函式呼叫程式,該引數只能用於賦值,不能用於傳值。
(3)in out引數型別:表示引數既可以傳值,也可以被賦值。
第一種引數傳遞格式稱為
位置表示法:
create or replace function cal_salary(demp_name person.department%type) 表示demp_name為person表中的department型別
return number
issum_salary number;
begin select sum(salary) into sum_salary from person where department=demp_name; //into:將sum(salary)的值賦值給sum_salary
dbms_output.put_line('計算完成'); //dbms_output.put_line:輸出並換行
return sum_salary;
end;
//呼叫函式
declare
sum_salary number;
begin
sum_salary:=cal_salary('行政部');
dbms_output.put('行政部的薪資為:');
dbms_output.put_line(sum_salary);
end;
//也可以在select語句中呼叫,如select cal_salary('行政部') from dual;
第二種引數傳遞格式稱為名稱表示法,形勢引數與實際引數成對出現,相互間關係唯一確定,所以引數的順序可以任意排列
名稱表示法:呼叫的引數名必須和定義時的引數名相同
create or replace function get_salary(temp_salaryperson.salary%type)
return number
issum_salary number;
begin select sum(salary) into sum_salary from person where person.salary>=temp_salary;
dbms_output.put_line('計算完成');
return sum_salary;
end;
declare
sum_salary number;
temp_salary number;
begin
sum_salary:=get_salary(temp_salary=>4000);//是=>,而不是》=;temp_salary必須與函式定義時所宣告的形式引數名稱相同
dbms_output.put('行政部的薪資為:');
dbms_output.put_line(sum_salary);
end;
第三種引數傳遞格式稱為混合表示法:同時使用位置表示法和名稱表示法為函式傳遞引數
混合表示法:使用位置表示法所傳遞的引數必須放在名稱表示法所傳遞的引數前面
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 定義區域性變數。變...
Oracle自定義函式
二 刪除自定義函式 三 應用經驗 在oracle資料庫中,為了實現特定的功能,可以自定義函式,就像c c 語言,除了系統的庫函式,程式設計師還會編寫很多自定義的函式。create or replace function 函式名 引數1 模式 資料型別,return 資料型別 as 定義區域性變數。變...