2016-07-16 3 views
-1

Я получаю ошибку Oracle ORA-00972 Идентификатор слишком длинный. Вероятно, это связано с этой линиейORA-00972 Идентификатор слишком длинный - заявление объявления

WHERE EMPLOYEE_ID = & e;

Но я просто не могу понять это.

Чтобы проверить это, я удалил все операторы CASE и заявления сервера, но я все еще получаю сообщение об ошибке после ввода идентификатора сотрудника во время выполнения.

Изображение прилагается к ошибке во время выполнения. 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

Смежные вопросы