检查以下包

时间:2013-03-30 08:41:51

标签: plsql oracle10g

包装:

         create or replace package manage_emps
         is
            tax_rate constant number(5,2) := .28;
            v_id number;
            procedure insert_emp(p_deptno number,p_sal number);
            procedure delete_emp;
            procedure update_emp;
            function calc_tax(p_sal number) return number;
         end;

包体:

         create or replace package body manage_emps
         is
           procedure update_sal(p_raise_amt number)
           is
           begin
               update emp
               set sal = (sal * p_raise_amt) + sal;
               where empno = v_id;
           end;
           procedure insert_emp(p_deptno number,p_sal number)
           is
           begin
                insert into emp(empno,deptno,sal)
                values(v_id,p_deptno,p_sal);
           end;
           procedure delete_emp
           is
           begin
               delete from emp
               where empno = v_id;
           end;
           procedure update_emp
           is
           begin
               v_sal number(10,2);
               v_raise number(10,2);
               select sal into v_sal
               from emp
               where empno = v_id;
               if v_sal < 500 then
                  v_raise := .05;
               elsif v_sal < 1000 then
                  v_raise := .07;
               else
                  v_raise := .04;
               end if;
               update_sal(v_raise);
            end;
            function calc_tax(p_sal number) return number
            is
            begin
                return p_sal * tax_rate;
            end;
         end;

问题是“MANAGE_EMPS包中有多少公共程序?” 我回答“三”。怎么会出错?显然,包规范中提到了3个功能。该程序的声明/正文在包的正文中,然后是私有的。在body中,过程UPDATE_SAL是私有的。但正确的答案是:“没有”。没有公共程序?怎么样 ?

1 个答案:

答案 0 :(得分:4)

正确答案是三。包中有三个公共程序。

注意:

可以改进包装设计。 v_id应该是参数而不是全局变量。