2012-02-02 3 views
2

아무에게도 이것이 실행되지 않는 이유를 말해 줄 수 있습니까?PL/SQL 식별자 'string'을 선언해야합니다.

set serveroutput on ; 
Declare 
    TYPE type_emp IS RECORD(
     emp_name employees.last_name%TYPE, 
     emp_salary employees.salary%TYPE); 
    rec_emp type_emp; 
    due_for_a_raise CHAR(1); 
begin 
    SELECT last_name, salary into rec_emp 
    from employees 
    where employee_id = 150; 
    if emp_salary > 5000 then 
     due_for_a_raise := 'Y'; 
    else 
     due_for_a_raise := 'N'; 
    end if; 
    dbms_output.putline(last_name); 
    dbms_output.putline(salary); 
    dbms_output.putline(due_for_a_raise); 
end; 

오류가 나는가 선언되지 않는 이유는 그들이 type_emp에 선언되고 있기 때문에 나도 몰라 추측

Error report: 
ORA-06550: line 11, column 6: 
PLS-00201: identifier 'EMP_SALARY' must be declared 
ORA-06550: line 11, column 3: 
PL/SQL: Statement ignored 
ORA-06550: line 16, column 23: 
PLS-00201: identifier 'LAST_NAME' must be declared 
ORA-06550: line 16, column 3: 
PL/SQL: Statement ignored 
ORA-06550: line 17, column 23: 
PLS-00201: identifier 'SALARY' must be declared 
ORA-06550: line 17, column 3: 
PL/SQL: Statement ignored 
ORA-06550: line 18, column 15: 
PLS-00302: component 'PUTLINE' must be declared 
ORA-06550: line 18, column 3: 
PL/SQL: Statement ignored 

다음과 같습니다.

답변

5

참조 할 때 레코드를 사용해야합니다. dbms_output.put_line으로 전화하면 putline 사이에 밑줄이 있어야합니다.

SQL> ed 
Wrote file afiedt.buf 

    1 Declare 
    2  TYPE type_emp IS RECORD(
    3   emp_name employees.last_name%TYPE, 
    4   emp_salary employees.salary%TYPE); 
    5  rec_emp type_emp; 
    6  due_for_a_raise CHAR(1); 
    7 begin 
    8  SELECT last_name, salary 
    9  into rec_emp 
10  from employees 
11  where employee_id = 150; 
12  if rec_emp.emp_salary > 5000 then 
13  due_for_a_raise := 'Y'; 
14  else 
15  due_for_a_raise := 'N'; 
16  end if; 
17 dbms_output.put_line(rec_emp.emp_name); 
18 dbms_output.put_line(rec_emp.emp_salary); 
19 dbms_output.put_line(due_for_a_raise); 
20* end; 
SQL>/

PL/SQL procedure successfully completed.