程式包 學習筆記

2022-04-19 23:26:33 字數 3838 閱讀 1792

示例一、根據輸入的部門編號找到這個部門的所有員工

首先建立包,定義包規範

create

orreplace package getemp_pkg is

function getemp_fun(p_dno dept.deptno%type) return sys_refcursor; --

返回弱型別游標

end getemp_pkg;

執行後自動生成包的主體

定義包的主體(實現體)

create

orreplace

package body getemp_pkg

asfunction getemp_fun(p_dno dept.deptno%

type)

return sys_refcursor --

返回弱型別游標

ascur_emp sys_refcursor;

begin

open cur_emp for

select

*from emp where deptno=p_dno; --

開啟游標

return cur_emp; --

返回游標

endgetemp_fun;

end getemp_pkg;

呼叫包

declare

v_emp emp

%rowtype; --

定義變數來接收游標的內容

cur_emp sys_refcursor; --

定義游標來接收返回游標

v_dno dept.deptno%type; --

定義部門編號,轉入引數

begin

cur_emp :

= getemp_pkg.getemp_fun(&

v_dno);

loop

fetch cur_emp --

提取游標

into

v_emp;

exit

when cur_emp%notfound; --

退出條件

dbms_output.put_line(cur_emp%

rowcount||'

員工編號:

'|| v_emp.empno ||

'姓名:'||

v_emp.ename);

endloop;

close cur_emp; --

關閉游標

end;

示例二、包中有過程和函式

程式包規範

create

orreplace package pack_me is

procedure emp_proc(num number

);function emp_fun(eno number) return

varchar2

;end pack_me;

程式包主體

create

orreplace package body pack_me is

procedure emp_proc(num number) is

v_name

varchar2(50

);

begin

select ename into v_name from emp where empno=

num;

dbms_output.put_line(

'員工編號:

'||num||

'的姓名:'||

v_name);

endemp_proc;

function emp_fun(eno number) return

varchar2

asv_job

varchar2(50

);

begin

select job into v_job from emp where empno=

eno;

return

v_job;

--dbms_output.put_line('員工編號:'||empno||' 的職位:'||v_job);

endemp_fun;

end pack_me;

執行

--

程式包declare

v_empno emp.empno

%type:=&

empno;

v_job

varchar2(50

);begin

pack_me.emp_proc(v_empno);

v_job:

=pack_me.emp_fun(v_empno);

dbms_output.put_line(

'員工編號:

'||v_empno||

'的職位:'||

v_job);

end;

查詢包

--

查詢user_objects資料字典確認包規範及包體

select object_type,object_name,status from user_objects where object_type in('

package

','package body

');

--

查詢包的內容

select

*from user_source where type=

'package

'and name=

'getemp_pkg

';

刪除包刪除包規範drop package 包名稱

刪除包體

drop package body包名稱

刪除包規範裡會對其對應的包體一起刪除

包的重新編譯

alter

package 包名稱 compile package;

--示例

alter package getemp_pkg compile package;

包的純度級別語法:pragma restrict_references(函式名,wnds[,wnps][,rnds][,rups])

no純度等級說明1

wnds

函式不能悠資料庫表資料(無法使用dml更新)

2rnds

函式不能讀資料庫表(無法使用select查詢)

3wnps

函式不允許悠包中的變數內容

4rnps

函式不允許讀取包中的變數內容

PL SQL學習筆記 程式包

一 程式包的說明 create or replace package p xland ispragma serially reusable v val varchar2 32 function set val ref val varchar2 return varchar2 end p xland ...

Oracle學習筆記 6 程式包使用

程式包主體 首先執行 create or replace package mypack isprocedure employee2 proc employeeid number function employee2 function return varchar2 end 其次執行 create o...

adb 工具關閉程式包,開啟程式包,查詢程式包

1.關閉程式包 關閉的是google搜尋的包 命令是 adb shell am force stop com.android.quicksearchbox 2.開啟程式包 開啟的是google搜尋的包 命令是 adb shell am start w n com.android.quicksearc...