/案例 :建立乙個顯示雇員總人數的儲存過程。 /
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...