首页 > 解决方案 > 从主 oracle 存储过程调用 Oracle 存储过程(语法错误)

问题描述

我正在尝试创建一个主 Oracle 存储过程,调用其他 Oracle 存储过程。我在 Toad 中遇到语法错误。

环境为Windows Server 2012R2,Oracle版本为12.1.0。

主要的存储过程很简单:

CREATE OR REPLACE PROCEDURE TESTDB.MAIN
(
ID IN NUMBER

)
IS


BEGIN

CALL PROCEDURE1(ID);
CALL PROCEDURE2(ID);
CALL PROCEDURE3(ID);
CALL PROCEDURE4(ID);


END;

在为每个过程编译时出现语法错误:

PLS-00103:在预期以下情况之一时遇到符号“PROCEDURE1”:

:= 。( @ % ; 符号 ":=" 被替换为 "PROCEDURE1" 以继续。

从一个中心过程调用过程的正确语法是什么?

标签: oraclestored-proceduresoracle12c

解决方案


你必须删除CALL,只能使用

从 SQL 中执行例程 […]

BEGIN
  PROCEDURE1(ID);
  PROCEDURE2(ID);
  PROCEDURE3(ID);
  PROCEDURE4(ID);
END;

例如:

SQL> create or replace procedure proc(n IN OUT number) is begin n := 10; end;
  2  /

Procedure created.

SQL> var x number
SQL> call proc(:x);

Call completed.

SQL> print :x

         X
----------
        10

SQL> declare
  2    y number;
  3  begin
  4    call proc(y);
  5  end;
  6  /
  call proc(y);
       *
ERROR at line 4:
ORA-06550: line 4, column 8:
PLS-00103: Encountered the symbol "PROC" when expecting one of the following:
:= . ( @ % ;
The symbol ":=" was substituted for "PROC" to continue.


SQL>

推荐阅读