2016-07-16 96 views
-1

我得到的Oracle錯誤ORA-00972標識符太長。這可能是由於此行ORA-00972標識符太長 - 聲明語句

WHERE EMPLOYEE_ID =&e;

但我只是無法弄清楚。

爲了測試這個,我刪除了所有CASE語句和serverout語句,但在運行時輸入員工ID後仍然出現錯誤。

圖像在運行時附加了錯誤。 Error

set echo on 
    spool c:\cs422a\wa4spool.txt 
    SET SERVEROUT ON 

DECLARE Emp_rec HR.EMPLOYEES%ROWTYPE; 

BEGIN 
    SELECT * 
    INTO Emp_rec 
    FROM HR.EMPLOYEES 
    WHERE EMPLOYEE_ID = &e; 

    DBMS_OUTPUT.PUT_LINE("---------------------------------------'); 
    CASE Emp_rec.Department_ID 
     WHEN 10 THEN DBMS_OUTPUT.PUT_LINE('Department: Administration'); 
     WHEN 20 THEN DBMS_OUTPUT.PUT_LINE('Department: Marketing'); 
     WHEN 30 THEN DBMS_OUTPUT.PUT_LINE('Department: Purchasing'); 
     WHEN 40 THEN DBMS_OUTPUT.PUT_LINE('Department: Human Resources'); 
     WHEN 50 THEN DBMS_OUTPUT.PUT_LINE('Department: Shipping'); 
     WHEN 60 THEN DBMS_OUTPUT.PUT_LINE('Department: IT'); 
     WHEN 70 THEN DBMS_OUTPUT.PUT_LINE('Department: Public Relations'); 
     WHEN 80 THEN DBMS_OUTPUT.PUT_LINE('Department: Sales'); 
     WHEN 90 THEN DBMS_OUTPUT.PUT_LINE('Department: Executive'); 
     WHEN 100 THEN DBMS_OUTPUT.PUT_LINE('Department: Finance'); 
     WHEN 110 THEN DBMS_OUTPUT.PUT_LINE('Department: Accounting'); 
     WHEN 120 THEN DBMS_OUTPUT.PUT_LINE('Department: Treasury'); 
     WHEN 130 THEN DBMS_OUTPUT.PUT_LINE('Department: Corporate Tax'); 
     WHEN 140 THEN DBMS_OUTPUT.PUT_LINE('Department: Control and Credit'); 
     WHEN 150 THEN DBMS_OUTPUT.PUT_LINE('Department: Shareholder Services'); 
     WHEN 160 THEN DBMS_OUTPUT.PUT_LINE('Department: Benefits'); 
     WHEN 170 THEN DBMS_OUTPUT.PUT_LINE('Department: Manufacturing'); 
     WHEN 180 THEN DBMS_OUTPUT.PUT_LINE('Department: Construction'); 
     WHEN 190 THEN DBMS_OUTPUT.PUT_LINE('Department: Contracting'); 
     WHEN 200 THEN DBMS_OUTPUT.PUT_LINE('Department: Operations'); 
     WHEN 210 THEN DBMS_OUTPUT.PUT_LINE('Department: IT Support'); 
     WHEN 220 THEN DBMS_OUTPUT.PUT_LINE('Department: NOC'); 
     WHEN 230 THEN DBMS_OUTPUT.PUT_LINE('Department: IT Helpdesk'); 
     WHEN 240 THEN DBMS_OUTPUT.PUT_LINE('Department: Government Sales'); 
     WHEN 250 THEN DBMS_OUTPUT.PUT_LINE('Department: Retail Sales'); 
     WHEN 260 THEN DBMS_OUTPUT.PUT_LINE('Department: Recruiting'); 
     WHEN 270 THEN DBMS_OUTPUT.PUT_LINE('Department: Payroll'); 
    END CASE; 
    DBMS_OUTPUT.PUT_LINE('Department:  '  || Emp_rec.DEPARTMENT_ID); 
    DBMS_OUTPUT.PUT_LINE('Employee ID:   ' || Emp_rec.EMPLOYEE_ID); 
    DBMS_OUTPUT.PUT_LINE('Employee First Name: ' || Emp_rec.FIRST_NAME); 
    DBMS_OUTPUT.PUT_LINE('Employee Last Name: ' || Emp_rec.LAST_NAME); 
    DBMS_OUTPUT.PUT_LINE('Salary:    ' || Emp_rec.SALARY); 
    DBMS_OUTPUT.PUT_LINE('---------------------------------------'); 
EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
    DBMS_OUTPUT.PUT_LINE('No data found.'); 

END; 
/
+0

語法突出顯示是你的朋友。 – sstan

+0

投票結束,因爲它是由簡單的錯字引起的(使用單引號時它應該是一個雙引號)。 –

+0

@Ken White:你的意思是在使用雙引號時應該使用單引號;) – sstan

回答

2

你在第9行一個錯字:

DBMS_OUTPUT.PUT_LINE("---------------------------------------'); 

有一個雙引號,當它應該是一個單引號。

雙引號在標識符中用於強制區分情況(詳見this question)。

在您的示例中,PL/SQL解析器認爲您正在嘗試使用名爲---------------------------- -----------(...),這會導致ORA-00972。

+0

我感到非常啞,非常感謝。 – rem0nster