一个存储过程,报错如下 13 PL/SQL:ORA-00922:缺少或无效选项 13 PL/SQL:SQL Statement ignored

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个存储过程,报错如下 13 PL/SQL:ORA-00922:缺少或无效选项 13 PL/SQL:SQL Statement ignored相关的知识,希望对你有一定的参考价值。

存储过程如下:
create or replace procedure P_ZJ_CJ_Dblink(JK_MC IN VARCHAR2,
MM IN VARCHAR2,
URL IN VARCHAR2) IS
avc_Dblinkname VARCHAR2(200);
avc_mm VARCHAR2(10);
avc_url varchar2(400);
cursor Dblinkzj_cursor is
select JK_MC, MM, URL from xc_dkpz_jkbs;
BEGIN
Open Dblinkzj_cursor;
Fetch Dblinkzj_cursor
into avc_Dblinkname, avc_mm, avc_url;
SET SERVEROUTPUT ON;

begin
DBMS_OUTPUT.PUT_LINE("create database link");
DBMS_OUTPUT.PUT_LINE("'||avc_Dblinkname||'");
DBMS_OUTPUT.PUT_LINE("connect to DKPZ");
DBMS_OUTPUT.PUT_LINE("identified by DKPZ");
DBMS_OUTPUT.PUT_LINE("using '(DESCRIPTION =");
DBMS_OUTPUT.PUT_LINE("(ADDRESS_LIST =");
DBMS_OUTPUT.PUT_LINE("(ADDRESS = (PROTOCOL = TCP)");
DBMS_OUTPUT.PUT_LINE("(HOST = '||avc_url||')(PORT =");
DBMS_OUTPUT.PUT_LINE("1521))");
DBMS_OUTPUT.PUT_LINE(")");
DBMS_OUTPUT.PUT_LINE("(CONNECT_DATA =");
DBMS_OUTPUT.PUT_LINE("(SID = DKPZ)");
DBMS_OUTPUT.PUT_LINE(" )");
DBMS_OUTPUT.PUT_LINE(")';");
end;
Close Dblinkzj_cursor;
END;

在控制语句输出的时候是不需要begin end的还有可以把SET SERVEROUTPUT ON;
外在存储过程的外面追问

不好意思,我是菜鸟,我把begin end去掉了 错误还在。SET SERVEROUTPUT ON;放在存储过程的外面是什么意思

追答

就是在create 存储过程的语句之前,先执行SET SERVEROUTPUT ON;
然后再create 存储过程

追问

我把SET SERVEROUTPUT ON;单放到存储过程前边了,可是执行SET SERVEROUTPUT ON;时还是报错ORA-00922:缺少或无效选项

追答

晕,你说set这句话错误还是存储过程错,你要保证set 这个话正确哈

参考技术A SET SERVEROUTPUT ON;
这个东西不是放在procedure里的.
移除就好了.
参考技术B pl/sql development工具不支持:set serveroutput on

只是oracle自带的sqlplus可以使用这个命名

pl/sql中存储过程怎么写decode(a_id, '12', '风, '28', '区') ?编译报错,decode 功能怎么实现

decode(a_id, '12', '风', '28', '区'),风字后面少了一个单引号。
最科学的办法,还要加一个default值

decode(a_id, '12', '风', '28', '区','找不到对应')

decode的用法:

DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值.
其具体的语法格式如下:
DECODE(input_value,value,result[,value,result…][,default_result]);
其中:
input_value 试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果
value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应
result 是一组成序偶的结果值
default_result 未能与任何一序偶匹配成功时,函数返回的默认值
下面的例子说明了,如何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目,作为DECODE函数的实参支持值。
SELECT checkup_type,
DECODE(blood_test_flag,’Y’,’Yes’,’N’,’No’,NULL,’None’,’Invalid’)
FROM checkup;追问

我试了在存储过程中不用单引号就可以

追答

如果a_id是数值的,那,12,28,这些条件,就不需要加单引号的,但
取值你想输出字符型的,一定要加单 引号。

参考技术A 少了个参数。
decode(a_id, '12', '风', '28', '区','缺省值')
意为:if a_id = '12' then
返回 '风'
elsif a_id = '28' then
返回 '区'
else
返回 '缺省值'
end if;
参考技术B decode(a_id, '12', '风', '28', '区');
你少了个'号
decode(列,值1,值2,值3,值4)
就是如果列的值等于值1则 返回值2 如果等于值3则返回值4 依次类推追问

没发现少什么啊,直接执行可以的,在存储过程中执行不了而已

以上是关于一个存储过程,报错如下 13 PL/SQL:ORA-00922:缺少或无效选项 13 PL/SQL:SQL Statement ignored的主要内容,如果未能解决你的问题,请参考以下文章

oracle创建存储过程时,提示错误是:错误(5,18): PL/SQL: ORA-00947: 没有足够的值?代码如下:

oracle创建存储过程时,提示错误是:错误(5,18): PL/SQL: ORA-00947: 没有足够的值?代码如下:

PL/SQL中测试存储过程,如何立即输出DBMS_OUTPUT的语句。

用PL/SOL编写一存储过程

Mysql、SQL server有没有PL/SQL?或者是类似PL/SQL的东西?PL/SQL是否存储过程?

ORA-06502: PL/SQL: 数字或值错误,我贴出来,大家帮我改一下,以前没怎么写过存储过程。。