2013-07-28 108 views
0

查看圖表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.

+0

@Bob Jarvis 可以請你如果親切地解釋這個問題 –

+0

什麼錯誤產生? –

+0

請編輯您的文章並添加您編寫的代碼以調用CALC_SAL。 EMPLOYEE_ID = 120的EMPLOYEES表中有哪些數據?謝謝。 –

回答

0

由於鮑勃的評論正確地陳述,代碼確實工作正常,所以測驗答案A是defensi BLE。

你說,因爲你得到這個錯誤:

ORA-01438: value larger than specified precision allowed for this column

這是一個數據問題。函數CALC_SAL()將成功提供SAL + SAL*10爲< = 999999.99,這個最大值將適合定義爲NUMBER(8,2)的列。因此,無論您的桌子是按照您認爲的方式定義的,還是您認爲的員工的原始薪水都較高。

+0

謝謝你解釋@Bob Jarvis –

+0

謝謝你解釋@APC –

相關問題