黑马程序员技术交流社区

标题: 麻烦各位想想下面两题的Oracle代码怎么写,思路是什么? [打印本页]

作者: 黄文伯    时间: 2013-5-9 22:55
标题: 麻烦各位想想下面两题的Oracle代码怎么写,思路是什么?
1.编写PL/SQL程序块,使用变量定义员工号为7900,使用记录变量接收该员工号的员工信息(员工姓名、工资和所在部门名称),
并分别将其姓名、工资和所在部门名称打印输出
2.编写PL/SQL程序块更新表emp,定义变量部门编号,根据部门编号更新该部门的员工工资
先对部门编号进行If判断。若部门编号不存在,则显示“该部门不存在”,否则使用case执行以下步骤
部门10的员工增加10%的工资
部门20的员工降低5%的工资
其它部门的员工增加300元的工资


作者: 金辉    时间: 2013-5-9 23:19
先抢楼,帮顶
作者: 黄文伯    时间: 2013-5-10 13:12
金辉 发表于 2013-5-9 23:19
先抢楼,帮顶

下面是第1题代码,还有待优化
思路:1,使用变量定义员工好为7900应该理解为:v_empno=7900
        2,使用记录变量接受该员工的员工信息应该理解为:v_emp_rec emp%ROWTYPE;  v_dname dept.dname%TYPE,v_dept_rec dept%ROWTYPE ,                      v_emp_rec.ename,v_emp_rec.sal,v.dept.rec.dname;
      3,emp表和dept表之间的关联是emp.deptno = dept.deptno;
  1. SET serveroutput ON
  2. DEFINE v_empno = 7900
  3. DECLARE
  4.         v_emp_rec emp%ROWTYPE;       
  5.         v_dept_rec dept%ROWTYPE;
  6. BEGIN
  7.         BEGIN
  8.                 SELECT * INTO v_emp_rec FROM emp WHERE empno = '&v_empno' ;
  9.         EXCEPTION
  10.                 WHEN TOO_MANY_ROWS THEN
  11.                         DBMS_OUTPUT.PUT_LINE('取得结果员工信息错误处理');
  12.                 WHEN OTHERS THEN
  13.                         NULL;
  14.         END;
  15.         BEGIN
  16.                 SELECT d.deptno,d.dname,d.loc INTO v_dept_rec
  17.                 FROM emp e,dept d
  18.                 WHERE e.deptno = d.deptno AND e.empno = '&v_empno';
  19.         EXCEPTION
  20.                 WHEN TOO_MANY_ROWS THEN
  21.                         DBMS_OUTPUT.PUT_LINE('取得结果部门信息错误处理');
  22.                 WHEN OTHERS THEN
  23.                         NULL;
  24.         END;
  25.         DBMS_OUTPUT.PUT_LINE('该员工的信息如下所示:');
  26.         DBMS_OUTPUT.PUT_LINE('员工姓名:'||v_emp_rec.ename);
  27.         DBMS_OUTPUT.PUT_LINE('工资:'||v_emp_rec.sal);
  28.         DBMS_OUTPUT.PUT_LINE('所在部门名称:'||v_dept_rec.dname);
  29. END;
  30. /
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2