第四章 儲存過程 案例課堂練習

2021-08-21 23:33:50 字數 3280 閱讀 4125

/案例 :建立乙個顯示雇員總人數的儲存過程。 /

create or replace procedure pro_empcou

is v_count number;

begin

select count(*) into v_count from emp;

dbms_output.put_line(『總的雇員人數是:』||v_count);

end;

儲存過程已經建立,接下來 呼叫:

call pro_empcou()

/*案例:編寫給雇員增加工資的儲存過程change_salary,

通過in型別的引數傳遞要增加工資的雇員編號和增加的工資額。*/

create or replace procedure change_salary

(p_empno in number default 7369,p_raise in number default 300,p_sumsal in out number)

as v_ename emp.ename%type;

v_sal number;

begin

select ename,sal into v_ename,v_sal from emp where empno=p_empno;

update emp set sal = sal+ p_raise where empno=p_empno;

dbms_output.put_line(v_ename||』的工資增加以後是』||to_char(p_sumsal));

p_sumsal:=v_sal+p_raise;

exception

when others then dbms_output.put_line(『發生錯誤,修改失敗!』);

rollback;

end;

儲存過程已經建立,接下來 呼叫:

begin

change_salary;

end;

第二種呼叫: 引數位置要對應

declare

v1 number :=&empno;

v2 number :=500;

v3 number :=200;

begin

change_salary(v1,v2,v3);

dbms_output.put_line(v3);

end;

課堂練習:

/(1)建立乙個儲存過程,以員工號為引數,輸出該員工的工資 /

create or replace procedure

pro_sal_empno01(p_empno number)

is v_ename varchar2(20);

v_sal number;

begin

select ename,sal into v_ename, v_sal from emp

where empno=p_empno;

dbms_output.put_line(v_ename||』的工資是』||v_sal);

end;

——方式二:

create or replace procedure

pro_sal_empno02

(p_empno number,p_ename out varchar2,

p_sal out number )

is begin

select ename,sal into p_ename, p_sal from emp

where empno=p_empno;

end;

declare

v_ename varchar2(20);

v_sal number;

begin

pro_sal_empno02(7369,v_ename,v_sal);

dbms_output.put_line(v_ename||』的工資是』||v_sal);

end;

(2)建立乙個儲存過程,以員工號為引數,修改該員工的工資。

若該員工屬於10號部門,則工資增加150;

若屬於20號部門,則工資增加200;

若屬於30號部門,則工資增加250;

若屬於其他部門,則增加300。

create or replace procedure

pro_empno_editsal(p_empno number)

is v_ename varchar2(20);

v_sal emp.sal%type;

begin

update emp set sal =sal+(

case deptno

when 10 then 150

when 20 then 200

when 30 then 250

else 300 end) where empno=p_empno;

–commit;

select ename ,sal into v_ename,v_sal

from emp where empno=p_empno;

dbms_output.put_line(v_ename||』的工資是』||v_sal);

end;

儲存過程已建立,呼叫:

call pro_empno_editsal(7369);

方式二:

create or replace procedure

proemp(p_empno emp.empno%type)

as v_deptno emp.deptno%type;

v_sal emp.sal%type;

begin

select sal,deptno into v_sal,v_deptno from emp where empno = p_empno;

if v_deptno = 10 then

v_sal := v_sal+150;

elsif v_deptno = 20 then

v_sal := v_sal+200;

elsif v_deptno = 30 then

v_sal := v_sal+250;

else

v_sal := v_sal+300;

end if;

update emp set sal = v_sal where empno = p_empno;

end;

儲存過程已建立

C PRIMER第四章練習

4.1 先乘除後加減,105 4.2a vec.begin b vec.begin 1 4.3可以接受,可以提高編譯器效率,潛在缺陷只要注意不讓表示式指向並修改同一物件就可以忽略 4.4 12 3 4 5 15 24 4 2 91 4.5a 86 b 18 c 0d 2 4.6if ival 2 為...

第四章資料儲存

android中的資料傳輸方式有五種,分別是檔案儲存,sharedpreferences,sqlite資料庫,contentprovider以及網路儲存。sharedpreferences是android平台上乙個輕量級的儲存類,用於儲存一些應用程式的配置引數。如使用者名稱密碼等。儲存資料 shar...

第四章 4 9節練習

練習4.28 寫一段程式,輸出每一種內建型別所佔空間的大小。解答 這裡可以用sizeof來輸出你想得到的型別的大小。練習4.29 推斷下面 的輸出結果並說明理由。實際執行這段程式,結果和你想象的一樣嗎?如果不一樣,為什麼?int x 10 int p x cout sizeof x sizeof x...