查看图表1,检查员工表的结构:任何人都可以帮助我从这个转储?
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;
/
执行代码时是什么结果?
答:在调用时,两个块都能成功编译和执行。
B.两个块都成功编译,但CALC_SAL过程给出了执行时的错误。
C. CALC_SAL过程给编译带来了一个错误,因为amt变量应该在RAISE_SALARY过程中声明。
D.由于RAISE_SALARY过程不能调用独立增加函数,因此CALC_SAL过程给出编译时的错误。
我选择了B,因为我编译函数和过程并且它的编译很成功,但我试图调用(执行)过程calc_sal并给出错误。
你能向我解释这个错误的原因是什么,我的答案是正确还是错误?因为在转储答案是
我调用的程序与此代码:
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.
和EMPLOYEE_ID列有107员工他们从100个号码到206.
@Bob Jarvis 可以请你如果亲切地解释这个问题 –
什么错误产生? –
请编辑您的文章并添加您编写的代码以调用CALC_SAL。 EMPLOYEE_ID = 120的EMPLOYEES表中有哪些数据?谢谢。 –