2016-07-16 2 views
-1

Ich bekomme den Oracle-Fehler ORA-00972 Identifier zu lange. Dies ist wahrscheinlich auf diese Zeile zurückzuführen.ORA-00972 Identifier zu lang - Deklariere Anweisung

WHERE EMPLOYEE_ID = & e;

Aber ich kann es einfach nicht herausfinden.

Um dies zu testen, habe ich alle CASE-Anweisungen und Serverout-Anweisungen entfernt, aber ich bekomme immer noch den Fehler nach der Eingabe der Mitarbeiter-ID zur Laufzeit.

Ein Bild des Fehlers wird zur Laufzeit angehängt. 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

Syntax Hervorhebung ist dein Freund. – sstan

+0

Voting zum Schließen als Off-Topic, weil es durch einen einfachen Tippfehler verursacht wird (Verwendung eines einfachen Zitats, wenn es ein Doppelzitat hätte sein sollen). –

+0

@Ken White: Du meinst die Verwendung eines doppelten Zitats, wenn es ein einfaches Zitat hätte sein sollen;) – sstan

Antwort

2

Sie haben einen Tippfehler in Zeile 9:

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

Es gibt ein doppeltes Anführungszeichen, wenn es dich um einen Apostroph sein solle.

Doppelte Anführungszeichen werden in Bezeichnern verwendet, um Groß-/Kleinschreibung zu erzwingen (Details siehe this question).

In Ihrem Beispiel glaubt der PL/SQL-Parser, dass Sie versuchen, eine Variable mit dem Namen ---------------------------- zu verwenden. ----------- (...) und das verursacht das ORA-00972.

+0

Ich fühle mich dumm, vielen Dank. – rem0nster