PL/SQL 标识符“字符串”必须声明

发布于 2025-01-01 17:24:12 字数 1205 浏览 1 评论 0原文

谁能告诉我为什么这不会执行?

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;  

错误如下,

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

我想我不知道为什么没有声明它,因为它们是在 type_emp 中声明的。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

女中豪杰 2025-01-08 17:24:12

当您引用它们时,您需要使用该记录。对 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.

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.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文