查看圖表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表中有哪些數據?謝謝。 –