在存储过程中输出单行(oracle)

时间:2012-10-29 01:14:01

标签: oracle procedure

我正在尝试按照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”:begin function pragma procedure子类型类型当前游标删除存在于外部语言之前符号“begin”被替换让“DECLARE”继续。

错误(14,8):PLS-00103:当遇到以下情况之一时遇到符号“文件结束”:(如果循环mod null pragma raise返回,则为goto开始大小写声明结束异常退出选择更新,同时使用<<继续关闭当前删除提取锁定插入打开回滚保存点设置sql执行提交forall合并管道清除

它出了什么问题?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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