2

我正在尝试遵循http://dba-oracle.com/t_pl_sql_plsql_select_into_clause.htm上的示例

但是当我这样做时

create or replace PROCEDURE age
is
declare
info movie%rowtype;
BEGIN
dbms_output.enable();
select * into info from movie where mo_id=1;

dbms_output.put_line('The name of the product is ' || info.mo_id);

END age;

/

它给出了几个错误:

错误(4,1):PLS-00103:在预期以下情况之一时遇到符号“DECLARE”:开始函数杂注过程子类型类型当前游标删除存在先前的外部语言符号“开始”被替换为“声明”以继续.

错误(14,8):PLS-00103:在预期以下情况之一时遇到符号“文件结尾”:(开始案例声明结束异常退出 goto if loop mod null pragma raise return select update while with <<继续关闭当前删除获取锁插入打开回滚保存点设置sql执行提交forall合并管道清除

它出什么问题了?

4

2 回答 2

3

尝试以下操作,您不需要在过程中声明。

create or replace PROCEDURE
age
is
info movie%rowtype;
BEGIN
--dbms_output.enable();
select * into info from movie where mo_id=1;

dbms_output.put_line('The name of the product is ' || info.mo_id);

END age;
/

并执行您可以执行的程序

exec age
于 2012-10-29T03:38:16.667 回答
1

您的代码中有几件事需要查看:首先。正如@Polppan 已经提到的,DECLARE从存储过程中删除关键字。没有必要。但是,当您编写匿名 PL/SQL 块时,您将需要它。第二。如果您dbms_output.enable()在过程中使用然后显示行,我假设您为此使用 sql*plus,您将需要调用,dbms_output.get_lines()否则它不会给您想要的结果。因此,为了简化使用set serveroutput onsql*plus 的命令来启用输出。dbms_output.enable()并且不要混合setserveroutput on使用它们中的任何一个。不是都。这是一个例子:

SQL> CREATE OR REPLACE PROCEDURE Print_data
  2  is
  3    l_var_1 varchar2(101);
  4  BEGIN
  5    select 'Some data'
  6      into l_var_1
  7      from dual;
  8    dbms_output.put_line(l_var_1);
  9  END;
 10  /

Procedure created

SQL> set serveroutput on;
SQL> exec print_data;

Some data

PL/SQL procedure successfully completed

SQL> 
于 2012-10-29T06:13:48.747 回答