【问题标题】:Code is absolutely correct but it showing Sid as invalid identifier代码绝对正确,但将 Sid 显示为无效标识符
【发布时间】:2019-09-19 04:16:49
【问题描述】:
create or replace package body stu_package

as

procedure select_student(id number)

is

name varchar2(20);

begin

select sname into name from students where sid=id;

dbms_output.put_line(name);

end select_ student;

end stu_package;

【问题讨论】:

标签: oracle plsql package


【解决方案1】:

不是“绝对”正确的,因为您应该在程序结束时删除一个空格:

end select_ student;

除此之外,是的 - 没关系。测试用例:

SQL> create table students (sid number, sname varchar2(10));

Table created.

SQL> insert into students values (1, 'LF');

1 row created.

包装规格:

SQL> create or replace package stu_package as
  2    procedure select_student(id number);
  3  end;
  4  /

Package created.

包体:

SQL> create or replace package body stu_package
  2  as
  3    procedure select_student(id number)
  4    is
  5      name varchar2(20);
  6    begin
  7      select sname into name from students where sid=id;
  8      dbms_output.put_line(name);
  9    end select_student;              --> remove a space
 10  end stu_package;
 11  /

Package body created.

测试:

SQL> set serveroutput on
SQL> exec stu_package.select_student(1);
LF

PL/SQL procedure successfully completed.

SQL>

因此,虽然您说一切正常,但列名似乎不是sid

SQL> alter table students rename column sid to id;

Table altered.

SQL> create or replace package body stu_package
  2  as
  3    procedure select_student(id number)
  4    is
  5      name varchar2(20);
  6    begin
  7      select sname into name from students where sid=id;
  8      dbms_output.put_line(name);
  9    end select_student;
 10  end stu_package;
 11  /

Warning: Package Body created with compilation errors.

SQL> show err
Errors for PACKAGE BODY STU_PACKAGE:

LINE/COL ERROR
-------- --------------------------------------------------------------
7/5      PL/SQL: SQL Statement ignored
7/48     PL/SQL: ORA-00904: "SID": invalid identifier
SQL>

或者,也许您在创建表格时将其名称括在双引号中(如果是这样,请不要这样做!):

SQL> alter table students rename column id to "sid";

Table altered.

SQL> select * From students;

       sid SNAME
---------- ----------
         1 LF

SQL> create or replace package body stu_package
  2  as
  3    procedure select_student(id number)
  4    is
  5      name varchar2(20);
  6    begin
  7      select sname into name from students where sid=id;
  8      dbms_output.put_line(name);
  9    end select_student;
 10  end stu_package;
 11  /

Warning: Package Body created with compilation errors.

SQL> show err
Errors for PACKAGE BODY STU_PACKAGE:

LINE/COL ERROR
-------- --------------------------------------------------------------
7/5      PL/SQL: SQL Statement ignored
7/48     PL/SQL: ORA-00904: "SID": invalid identifier
SQL>

所以,如果你真的使用双引号,你就必须一直这样做:

SQL> create or replace package body stu_package
  2  as
  3    procedure select_student(id number)
  4    is
  5      name varchar2(20);
  6    begin
  7      select sname into name from students where "sid"=id;     --> here
  8      dbms_output.put_line(name);
  9    end select_student;
 10  end stu_package;
 11  /

Package body created.

SQL>

【讨论】:

  • 好的,我明白我做错了什么。现在我纠正了这个问题
  • 好的;很高兴你修好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 2018-07-10
相关资源
最近更新 更多