Oracle 有谁能在垃圾场帮我吗?

Oracle 有谁能在垃圾场帮我吗?,oracle,function,stored-procedures,plsql,Oracle,Function,Stored Procedures,Plsql,查看附件1并检查employees表的结构: desc employees Name Null Type ------------------------------------------------- EMPLOYEE_ID NOT NULL NUMBER(6) FIRST_NAME VARCHAR2(20) LAST_NAME

查看附件1并检查employees表的结构:

desc employees
Name                           Null     Type
-------------------------------------------------
EMPLOYEE_ID                    NOT NULL NUMBER(6)
FIRST_NAME                              VARCHAR2(20)
LAST_NAME                      NOT NULL CHAR(25)
EMAIL                          NOT NULL VARCHAR2(25)
PHONE_NUMBER                            VARCHAR2(20)
HIRE_DATE                      NOT NULL DATE
JOB_ID                         NOT NULL VARCHAR2(10)
SALARY                                  NUMBER(8,2)
COMMISSION_PCT                          NUMBER(2,2)
MANAGER_ID                              NUMBER(6)
DEPARTMENT_ID                           NUMBER(4)
查看附件2并检查代码:

CREATE OR REPLACE FUNCTION increase
    (emp_num NUMBER) RETURN NUMBER
IS
  inc_amt NUMBER;
  sal     NUMBER;
BEGIN
  SELECT salary INTO sal FROM employees WHERE employee_id = emp_num;

  inc_amt := sal*10;
  RETURN inc_amt;

END increase;
/

CREATE OR REPLACE PROCEDURE calc_sal IS
  emp_num NUMBER(7) := 120;
  amt     NUMBER    :=0;

  PROCEDURE raise_salary
    (emp_id NUMBER)
  IS
  BEGIN
    amt := increase(emp_num);

    UPDATE employees SET salary = salary+amt WHERE employee_id=emp_id;  
  END raise_salary;

BEGIN
  raise_salary(emp_num);
END calc_sal;
/  
代码执行时的结果是什么

A.调用时,两个块都编译并执行成功

B.两个块都成功编译,但计算过程在执行时出现错误

C.计算程序在编译时出错,因为amt变量应在加薪程序中声明

D.计算过程在编译时出错,因为加薪过程无法调用独立的加薪函数

我选择B是因为我成功地编译了函数和过程及其编译,但我尝试调用(执行)过程calc_sal及其give me错误

你能给我解释一下这个错误的原因吗?我的答案是对的还是错的?因为在抑郁中,答案是

我使用以下代码调用该过程:

begin
calc_sal;
end;
我得到的错误是:

Error report:
ORA-01438: value larger than specified precision allowed for this column
ORA-06512: at "HR.CALC_SAL", line 7
ORA-06512: at "HR.CALC_SAL", line 11
ORA-06512: at line 2
01438. 00000 -  "value larger than specified precision allowed for this column"
*Cause:    When inserting or updating records, a numeric value was entered
           that exceeded the precision defined for the column.
*Action:   Enter a value that complies with the numeric column's precision,
           or use the MODIFY option with the ALTER TABLE command to expand
           the precision.

员工id栏中有107名员工,他们的号码从100到206。

由于Bob的评论说明正确,代码工作正常,因此测验答案A是可以辩护的

您之所以说B,是因为您遇到以下错误:

ORA-01438:该值大于允许的指定精度 纵队


这是一个数据问题。函数CALC_SAL()将成功提供
SAL+SAL*10
is@Bob Jarvis。如果您能优雅地解释这个问题,会产生什么错误?请编辑您的帖子并包含您编写的调用CALC_SAL的代码。员工ID=120的员工表中有哪些数据?谢谢。@BobJarvis我编辑了代码。这个问题似乎离题了,因为在多项选择题测试(认证填鸭式?)中查询答案。这不是一个编程主题。谢谢你解释@Bob Jarvis谢谢你解释@APC