我正在尝试按照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合并管道清除
它出了什么问题?
答案 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>