数据共享与整合技术-PLSQL练习

匿名 (未验证) 提交于 2019-12-02 23:36:01

1、编写一个存储过程,根据输入的工作类型,输出该工作的平均工资。

命令如下:

创建存储过程:

 create or replace procedure avgsal(v_job in emp.job%type) is avgsal2 number begin select avg(sal) into avgsal2 from emp where job=v_job; dbms_output.put_line(v_job || '---' || avgsal2) end; 

调用存储过程:

 Begin avgsal('MANAGER'); end; 

程序截图:

运行结果:

2、创建一个存储过程,以员工号为参数,输出该员工的工资。

命令如下:

创建存储过程:

 create or replace procedure p_sxtl(v_empno in emp.empno%type,v_sal out emp.sal%type) is  begin select sal into v_sal from emp where empno=v_empno; end; 

调用存储过程:

 declare  v_empno emp.empno%type :=7369; v_sal emp.sal%type; begin p_sxtl(v_empno,v_sal); dbms_output.put_line(v_empno || '员工的工资为:' || v_sal); end; 

程序截图:

运行结果:

3、创建一个存储过程,以员工号为参数,修改该员工的工资。若该员工属于10号部门,则工资增加150;若属于20号部门,则工资增加200;若属于30号部门,则工资增加250;--若属于其他部门,则增加300。

命令如下:

创建存储过程:

 create or replace procedure p_sxt2(v_empno in emp.empno%type) is v_deptno emp.deptno%type; v_sal emp.sal%type; Begin select deptno into v_deptno from emp where empno=v_empno; select sal into v_sal from emp where empno=v_empno; dbms_output.put_line(v_empno || '的部门是' || v_deptno || '修改前的工资是' || v_sal); case v_deptno when 10 then update emp set sal=sal+150 where empno=v_empno; when 20 then update emp set sal=sal+200 where empno=v_empno; when 30 then update emp set sal=sal+250 where empno=v_empno; else  update emp set sal=sal+300 where empno=v_empno; end case; select sal into v_sal from emp where empno=v_empno; dbms_output.put_line(v_empno || '部门是' || v_deptno || '修改后的工资是:' || v_sal); commit; end; 

调用存储过程:

 begin p_sxt2(7369); end; 

程序截图:

运行结果:

3、创建一个函数,以员工号为参数,返回该员工的工资。

命令如下:

创建函数:

 create or replace function f_sxtl(v_empno in emp.empno%type,v_sal out emp.sal%type) return emp.sal%type as  begin select sal into v_sal from emp where empno=v_empno; return v_sal; end; 

调用函数:

 Begin :result := f_sxtl(7369,v_sal => :v_sal); end; 

程序截图:

运行结果:

4、创建一个函数,以员工号为参数,返回该员工所在的部门的平均工资。

命令如下:

创建函数:

 create or replace function avegsal(v_empno in emp.empno%type) return emp.sal%type as avgsal2 emp.sal%type; begin -- Test statements here select avg(sal) into avgsal2 from emp where deptno = (select deptno from emp where empno=v_empno); return avgsal2; end; 

调用函数:

 begin :result := avegsal(7369); end; 

程序截图:

运行结果:

5、创建一个存储过程,以员工号和部门号作为参数,修改员工所在的部门为所输入的部门号。如果修改成功,则显示“员工由……号部门调入调入……号部门”;如果不存在该员工,则显示“员工号不存在,请输入正确的员工号。”;如果不存在该部门,则显示“该部门不存在,请输入正确的部门号。”

命令如下:

创建存储过程:

 create or replace procedure p_deptno(v_empno in emp.empno%type,v_deptno in emp.deptno%type) as vu_empno number := 0 ; vu_deptno number :=0 ; vm_deptno emp.deptno%type; begin select deptno into vm_deptno from emp where empno=v_empno; select count(*) into vu_empno from emp where empno=v_empno; select count(distinct deptno) into vu_deptno from emp where deptno=v_deptno; if vu_empno=0 then dbms_output.put_line('员工号不存在,请输入正确的员工号.'); end if; if vu_deptno=0 then dbms_output.put_line('该部门不存在,请输入正确的部门号.'); end if; if vu_empno=1 and vu_deptno=1 then dbms_output.put_line('员工由' || vm_deptno || '号部门调入' || v_deptno || '号部门'); update emp set deptno=v_deptno where empno=v_empno; commit; end if; end; 

调用存储过程:

 (1)begin p_deptno(7369,40); end; (2)begin p_deptno(7369,10); end; 

程序截图:

(2)

运行结果:

(1)

(2)

文章来源: https://blog.csdn.net/weixin_39329758/article/details/90631874
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!