oracle基礎教程之包的建立 呼叫與刪除

2021-12-30 04:20:42 字數 4367 閱讀 5165

舉例:--建立包規範

create or replace package emp_package

is --新增員工資訊的儲存過程

procedure add_emp_proc

(v_empno in emp.empno%type,

v_ename in emp.ename%type,

v_sal in emp.sal%type,

v_deptno in emp.deptno%type);

--刪除員工資訊的儲存過程

為上麵包規範建立包體:

--建立包體

create or replace package body emp_package

is --新增員工資訊的儲存過程

procedure add_emp_proc

(v_empno in emp.empno%type,

v_ename in emp.ename%type,

v_sal in emp.sal%type,

v_deptno in emp.deptno%type)

ise_2291 exception;

pragma exception_init(e_2291,-2291);

begin

insert into emp(empno, ename, sal, deptno) values(v_empno,v_ename,v_sal,v_deptno);

exception

when dup_val_on_index then

raise_application_error(-20001,'員工號不能重複');

when e_2291 then

raise_application_error(-20008,'部門號不存在');

end;

--刪除員工資訊的儲存過程

procedure del_emp_proc

(v_empno in emp.empno%type)

isbegin

--根據員工號刪除指定的員工資訊

delete from emp where empno = v_empno;

--判斷是否刪除成功

if sql%notfound then

raise_application_error(-20009,'指定刪除的員工不存在');

else

dbms_output.put_line('刪除成功');

end if;

end;

end emp_package;

再舉個栗子(個人感覺還是上**通俗易懂):

--根據員工號查詢工資,如果工資小於等於3000,工資漲500.

--建立包規範

create or replace package emp_sal_pkg

is function get_sal(eno number)return number;

procedure upd_sal(eno number, salary number);

end emp_sal_pkg;

--包體

create or replace package body emp_sal_pkg

is --根據員工號查詢員工的工資

function get_sal(eno number)return number

isv_sal emp.sal%type:= 0;

begin

select sal into v_sal from emp where empno = eno;

return v_sal;

exception

when no_data_found then

raise_application_error(-20008,'此員工號不存在!');

end;

--更新滿足條件的員工的工資

栗子:--示例一:呼叫emp_package包下新增員工資訊的儲存過程

declare

v_empno emp.empno%type:=&empno;

v_ename emp.ename%type:='&name';

v_sal emp.sal%type:=&salary;

v_deptno emp.deptno%type:=&deptno;

--定義異常

e_dup_val exception;

e_no_dept exception;

--將異常名和異常編號聯絡起來

pragma exception_init(e_dup_val,-20001);

pragma exception_init(e_no_dept,-20008);

begin

emp_package.add_emp_proc(v_empno,v_ename,v_sal,v_deptno);

commit;

exception

when e_dup_val then

dbms_output.put_line(sqlerrm);

when e_no_dept then

dbms_output.put_line(sqlerrm);

rollback;

end;

--示例二:呼叫emp_package包下刪除指定員工的儲存過程

declare

v_empno emp.empno%type:=&empno;

e_no_emp exception;

pragma exception_init(e_no_emp,-20009);

begin

emp_package.del_emp_proc(v_empno);

commit;

exception

when e_no_emp then

dbms_output.put_line(sqlerrm);

rollback;

end;

--示例三:呼叫emp_sal_pkg包下函式和過程

栗子:--用sqlplus命令呼叫(下述命令請在command視窗或sqlplus視窗執行)

/*var v_empno number

exec :v_empno := &no

var v_salary number

exec :v_salary := emp_sal_pkg.get_sal(:v_empno)

exec emp_sal_pkg.upd_sal(:v_empno, :v_salary)

*/--刪除包

drop package first_package;

--刪除包體

drop package body first_package;

Python 基礎教程之包和類的用法

python 基礎教程之包和類的用法 建立乙個資料夾filepackage 在filepackage 資料夾內建立 init py 有了 init py filepackage才算是乙個包,否則只是算乙個普通資料夾。在filepackage 資料夾內建立 file.py file.py 如下 12 ...

QWT基礎教程之legends

效果預覽 工程目錄樹如下 headers mainwindow.h panel.h plot.h settings.h sources main.cpp mainwindow.cpp panel.cpp plot.cpp 這裡一共有4個.件,4個.c檔案,涉及到4個主要類 mainwindow pa...

C 基礎教程之引用

c 引用 引用變數是乙個別名,也就是說,它是某個已存在變數的另乙個名字。一旦把引用初始化為某個變數,就可以使用該引用名稱或變數名稱來指向變數。c 引用 vs 指標 引用很容易與指標混淆,它們之間有三個主要的不同 不存在空引用。引用必須連線到一塊合法的記憶體。一旦引用被初始化為乙個物件,就不能被指向到...