不是“绝对”正确的,因为您应该在程序结束时删除一个空格:
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>