第四章 存储过程 案例课堂练习


/案例 :创建一个显示雇员总人数的存储过程。 /
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;
存储过程已创建

猜你喜欢

转载自blog.csdn.net/weixin_42800008/article/details/81316333
今日推荐