PLSQL练习

--使用pl/sql块编程实现,注意必要的异常处理。


--1 输入一个员工号,输出该员工的姓名、薪金和工作时间(按年月日显示)。
DECLARE
emp_name SCOTT.EMP.ename%type;
emp_sal SCOTT.EMP.sal%type;
emp_hiredate SCOTT.EMP.hiredate%type;
BEGIN
  select ename,sal,hiredate into emp_name,emp_sal,emp_hiredate from emp where empno=&empno;
  dbms_output.put_line('姓名:'||emp_name||' 工资:'||emp_sal||' 入职时间:'||to_char(emp_hiredate,'yyyy-mm-dd'));
exception when others THEN
  dbms_output.put_line('发生异常!');
end;
--2 接收一个员工号,输出该员工所在部门的名称。
DECLARE
dept_dname dept.dname%type;
BEGIN
  select dname into dept_dname from emp e,dept d where e.deptno=d.deptno and empno=&empno;
  dbms_output.put_line('部门名称:'||dept_dname);
exception when others THEN
  dbms_output.put_line('发生异常!');
end;
--3 接收一个员工号,如果该员工职位是MANAGER,并且在DALLAS工作,那么就给他薪金加15%;如果该员工职位是CLERK,并且在NEW YORK工作,那么就给他薪金扣除5%;其他情况不作处理。
declare
    emp_job emp.job%type;
    dept_loc dept.loc%type;
    emp_sal emp.sal%type;
    emp_no emp.empno%type;
begin
  select job,loc,sal,e.empno into emp_job,dept_loc,emp_sal,emp_no from emp e,dept d where d.deptno=e.deptno and empno=&empno;
  if emp_job='MANAGER' and dept_loc='DALLAS' then
    emp_sal:=emp_sal*1.15; 
  elsif emp_job='CLERK' and dept_loc='NEW YORK' then
      emp_sal:=emp_sal*0.95;
  end if;
  dbms_output.put_line('职位:'||emp_job||' 工作地点:'||dept_loc||' 工资:'||emp_sal);
 update emp set sal=emp_sal where empno=emp_no;
exception when others THEN
  dbms_output.put_line('发生异常!');
end;
    
--4 接收一个员工号,输出这个员工所在部门的平均工资。
DECLARE
dept_avgsal emp.sal%type;
BEGIN
  select avg(sal) into dept_avgsal from emp e,dept d where e.deptno=d.deptno and e.deptno=(select deptno from emp where empno=&empno) group by e.deptno;
  dbms_output.put_line('该部门平均工资:'||dept_avgsal);
exception when others THEN
  dbms_output.put_line('发生异常!');
end;
--5 要求输入一个雇员编号,为此雇员增长工资,增长工作按照以下的原则进行:  · 10部门人员工资上涨10% · 20部门人员工资上涨20% · 30部门人员工资上涨30% 但是所有的工资最高不超过5000。
DECLARE
emp_sal EMP.sal%type;
dept_no EMP.deptno%type;
emp_no emp.empno%type;
BEGIN
select empno,deptno,sal into emp_no,dept_no,emp_sal from emp where empno=&empno;
if dept_no=10 THEN
emp_sal:=emp_sal*1.1;
elsif dept_no=20 THEN
emp_sal:=emp_sal*1.2;
elsif dept_no=30 THEN
emp_sal:=emp_sal*1.3;
elsif emp_sal>5000 THEN
emp_sal:=5000;
end if;
dbms_output.put_line('部门编号:'||dept_no||' 工资:'||emp_sal);
update emp set sal=emp_sal where empno=emp_no;
exception when others THEN
dbms_output.put_line('发生异常!');
end;
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经典的PL/SQL练习题常常涉及到条件判断、循环和数据操作等方面的知识。以下是一些经典的PL/SQL练习题: 1. 给定三个数值,返回其中较大的那个数: ```sql DECLARE A INT := &输入1; B INT := &输入2; C INT := &输入3; BEGIN IF A > B AND A > C THEN DBMS_OUTPUT.PUT_LINE(A); ELSIF B > A AND B > C THEN DBMS_OUTPUT.PUT_LINE(B); ELSIF C > A AND C > B THEN DBMS_OUTPUT.PUT_LINE(C); END IF; END; ``` [引用1] 2. 给定三个数值,按照从大到小的顺序返回: ```sql DECLARE A INT := &输入1; B INT := &输入2; C INT := &输入3; BEGIN IF A > B AND A > C THEN IF B > C THEN DBMS_OUTPUT.PUT_LINE(A || ',' || B || ',' || C); ELSIF C > B THEN DBMS_OUTPUT.PUT_LINE(A || ',' || C || ',' || B); END IF; ELSIF B > A AND B > C THEN IF A > C THEN DBMS_OUTPUT.PUT_LINE(B || ',' || A || ',' || C); ELSIF C > A THEN DBMS_OUTPUT.PUT_LINE(B || ',' || C || ',' || A); END IF; ELSIF C > A AND C > B THEN IF A > B THEN DBMS_OUTPUT.PUT_LINE(C || ',' || A || ',' || B); ELSIF B > A THEN DBMS_OUTPUT.PUT_LINE(C || ',' || B || ',' || A); END IF; END IF; END; ``` [引用1] 3. 编写一个存储过程,将STUDENT_INFO_01表中的数据拷贝到STUDENT_INFO_02表中: ```sql CREATE OR REPLACE PROCEDURE COPY_STUDENT_INFO AS BEGIN INSERT INTO STUDENT_INFO_02 SELECT * FROM STUDENT_INFO_01 WHERE AGE BETWEEN 15 AND 20 AND FLG = 0; END COPY_STUDENT_INFO; ``` [引用2] 4. 编写一个存储过程,将STUDENT_INFO_01表中的性别字段由Code转换为具体的性别: ```sql CREATE OR REPLACE PROCEDURE CONVERT_GENDER AS BEGIN UPDATE STUDENT_INFO_01 SET GENDER = CASE WHEN GENDER = 'M' THEN 'Male' WHEN GENDER = 'F' THEN 'Female' ELSE 'Unknown' END; END CONVERT_GENDER; ``` [引用2] 5. 给定一个数N,计算2^1 + 2^2 + ... + 2^N 的值: ```sql DECLARE N NUMBER := &输入; S NUMBER := 0; A NUMBER := 0; BEGIN FOR B IN 1 .. N LOOP A := A || 2; S := S + A; END LOOP; DBMS_OUTPUT.PUT_LINE(S); END; ``` [引用3] 这些是一些经典的PL/SQL练习题,涉及到了条件判断、循环和数据操作等方面的知识。可以通过编写相应的PL/SQL代码来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值