ORACLE 存储过程报错 PLS-00103 求查错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE 存储过程报错 PLS-00103 求查错相关的知识,希望对你有一定的参考价值。

其中username ,counter ,rolename 是传入参数,传入参数不能赋值,即第7、8行语句有问题,建议删除。

建议在plsql工具中编辑,方便。

扩展资料

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。

参考资料

百度百科-存储过程

参考技术A (username varchar2,counter int,rolename varchar2) 写法,认为三个参数都 in 类型。in 类型参数是不能赋值的。例如:rolename:='connect,resource'; username:='test';写法是错误的。
写成(username in out varchar2,counter int,rolename in out varchar2)这样,允许赋值。追问

更改之后还是不行 错误还是一样的

追答

参数(username varchar2,counter int,rolename varchar2)不要动,
把两个赋值语句rolename:='connect,resource'; username:='test'注释掉。
用 begin my_guant_role('test',10,'connect,resource'); end;

本回答被提问者和网友采纳
参考技术B 1、楼上肯定找出了一个错误,入参是不能赋值的,这个肯定不正常;
2、根据报错,应该是语法格式的问题。在应该要求以下关键词时(begin function),出现了''''符号;
3、建议在plsql工具中编辑,方便。
参考技术C 楼上正解!

在 Oracle 下创建存储过程时出错 - PLS-00103

【中文标题】在 Oracle 下创建存储过程时出错 - PLS-00103【英文标题】:Error on creating stored procedure under Oracle - PLS-00103 【发布时间】:2012-07-31 16:00:05 【问题描述】:

我正在尝试创建一个多次调用另一个的存储过程。这是通过为每个循环使用一个来完成的。所有开发均在oracle sql developer Version 3.0.04下进行。

    CREATE OR REPLACE PROCEDURE Z_INBILLABILITYSERV
    IS BEGIN
      DECLARE
        ano VARCHAR2(4); 
      BEGIN
        select EXTRACT(YEAR FROM sysdate) into ano from dual;
        FOR dat IN (SELECT * FROM Z_FECHOMES WHERE MES <= 
                   (select EXTRACT(MONTH FROM sysdate) from dual )and ANO = ano)
        LOOP
          call z_insertbillability(dat.periodo_inicio,dat.periodo_fim,
                                                                dat.ano,dat.mes);
        END LOOP;
      END;
    END;

我遇到以下错误:

错误(9,12):PLS-00103:在预期以下情况之一时遇到符号“Z_INSERTBILLABILITY”::=。 ( @ % ; 符号 ":=" 被替换为 "Z_INSERTBILLABILITY" 以继续。

如果有人有想法或提示,我现在会很高兴并且非常感激。

【问题讨论】:

【参考方案1】:

你不需要call这个词;做吧:

    LOOP
      z_insertbillability(dat.periodo_inicio,dat.periodo_fim,
                                                            dat.ano,dat.mes);
    END LOOP;

错误消息可能有点无用,但它试图显示它可以尝试解释单词call 的所有方式,因为它不会将其识别为关键字。并显示接下来会看到的内容:作为变量名(后面是 := 用于赋值;或模式名称(后面是 .);或函数/过程名称(后面是( 参数列表)等。

【讨论】:

非常感谢。你能解释一下为什么不需要这个电话吗?在我看到的所有示例中,总是有 call 或 exec 这个词,到目前为止我对此没有任何问题。 call 用于 JDBC 调用(可能还有其他); exec 用于 SQL*Plus。两者都表明您想要执行一些 PL/SQL 代码。一旦你进入了一个 PL/SQL 块,你就不需要再指出了。 好的,这是一个“外部资源”。非常感谢亚历克斯。祝你好运。

以上是关于ORACLE 存储过程报错 PLS-00103 求查错的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 存储过程运行时错误与 pls 00103

Oracle 错误 PLS-00103

无法使用varchar 2-pls-00103类型创建存储过程

执行存储过程“PLS-00103”时出现此错误

oracle - PLS-00103 & ORA -06550 关于程序

ORACLE if分支语句编译时报错PLS-00103