oracle筆記八(函式 儲存過程 包)

2021-08-30 12:21:13 字數 2488 閱讀 8058

函式:(過程和函式的唯一區別是函式總向呼叫者返回資料,而過程則不返回資料)

1. 建立函式

create or replace function get_salary(

v_deptno number,emp_count out number)return number

------這裡的type只能是型別,不能有長度或大小的定義

isv_sum number;

begin

select sum(sal),count(*) into v_sum,emp_count from emp

where deptno=v_deptno;

return v_sum;

exception

when no_data_found then

dbms_output.put_line('no data');

when others then

dbms_output.put_line(sqlcode||sqlerrm);

end;

2. 查詢函式資訊

a). select object_name from user_objects

where object_type=』function』;

b). select object_name from user_procedures;

c). select line,text from user_source

where name=』get_salary』;

3. 呼叫函式方法

declare

v_sum number;

v_num number;

begin

-----位置表示法

v_sum:=get_salary(30,v_num);

dbms_output.put_line(v_sum ||','||v_num);

-----名稱表示法

v_sum:=get_salary(emp_count=>v_num,v_deptno=>20);

dbms_output.put_line(v_sum ||','||v_num);

-----混合表示法(使用位置表示法所傳遞的引數必須放在名稱表示法所傳遞的引數前面 )

v_sum:=get_salary(10,emp_count=>v_num);

dbms_output.put_line(v_sum ||','||v_num);

end;

4. 結合select語句呼叫

select ename,sal ,tax(sal),tax(sal)*sal from emp;

儲存過程:

1. 建立過程

create or replace procedure delemp(

v_empno emp.empno%type)

isno_result exception;

begin

delete from emp where empno=v_empno;

if sql%notfound then

raise no_result;

else dbms_output.put_line(v_empno||'has been deleted');

end if;

exception

when no_result then

dbms_output.put_line('no data');

when others then

dbms_output.put_line(sqlcode||','||sqlerrm);

end;

2. 呼叫過程

a). begin

delemp(1234);

end;

b). exec delemp(1234);

c).在sql/plus中呼叫

set serveroutput on

exec delemp(1234);

包package:

1. 建立包定義

create or replace package mypack

isc_pi constant number:=3.14;

function getarea(r number)return number;

end;

2. 建立包體

create or replace package body mypack

isfunction getarea(r number)return number

isbegin

return c_pi*r*r;

end;

end;

3. 呼叫包

a). begin

dbms_output.put_line(mypack.getarea(5));

end;

b).exec mypack.getarea(5);

檢視過程的名字及其參數列

desc mypack.getarea;

Oracle(八)儲存過程

pl sql有以下3種儲存過程 建立過程 create or replace procedure 過程名 引數列表 is as 區域性變數宣告 begin 過程體 end 過程名 引數宣告的格式 引數名 in out in out 資料型別 初始值 in引數型別表示此引數接受過程外傳遞來的值 out...

Oracle基礎(八) 儲存過程

儲存過程是在大型資料庫中,事先經過編譯並儲存在資料庫中的一段sql語句的集合。如果有update操作,要在儲存過程外commit。儲存過程和儲存函式的區別 儲存過程可以通過輸出引數返回多個值,儲存函式只能返回乙個值 create or replace procedure 儲存過程名 引數 引數的格式...

Oracle儲存函式,儲存過程

一 oracle儲存函式 儲存的pl sql語法塊,完成特定的功能。1 語法 函式關鍵字 function 1 建立函式 create or replace function function name param1,param2 return is as local declarations de...