2016-07-16 1 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

관련 문제