PL/SQL identifier 'string' must be declared

17,455

You'd need to use the record when you're referencing them. Your calls to dbms_output.put_line also need to have an underscore between put and line.

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.
Share:
17,455
atrueresistance
Author by

atrueresistance

Updated on June 17, 2022

Comments

  • atrueresistance
    atrueresistance almost 2 years

    Can anyone tell me why this won't execute?

    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;  
    

    Errors are below

    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
    

    I guess I don't know why it isn't being declared since they are being declared in the type_emp.