Oracle 当尝试执行下面的查询时,我得到下面的错误“;无效查询",我认为问题在于第二个执行查询

Oracle 当尝试执行下面的查询时,我得到下面的错误“;无效查询",我认为问题在于第二个执行查询,oracle,plsql,Oracle,Plsql,当尝试执行下面的查询时,会导致“无效查询” 我认为问题在于第二个执行查询。请参见以下内容:内联阅读注释 CREATE or replace PROCEDURE abc as ret number; msg varchar2(1000); Begin execute immediate 'truncate table OBSPROJ'; execute immediate 'exec obsproj_full_rebuild(:ret,:msg)'; End abc; 执行: CREAT

当尝试执行下面的查询时,会导致“无效查询”


我认为问题在于第二个执行查询。

请参见以下内容:内联阅读注释

CREATE or replace PROCEDURE abc as 

ret number;
msg varchar2(1000);
Begin
execute immediate 'truncate table OBSPROJ';
execute  immediate 'exec obsproj_full_rebuild(:ret,:msg)';

End abc;
执行:

CREATE OR REPLACE PROCEDURE abc
AS
   ret   NUMBER;
   msg   VARCHAR2 (1000);
BEGIN
   EXECUTE IMMEDIATE 'truncate table OBSPROJ';
   --This is how you call a procedure inside a procedure.
   obsproj_full_rebuild(ret,msg); -- I guess your procedure accepts some values. .Here you are just passing the variables you declared.
END abc;

首先:exec既不是SQL,也不是PL/SQL命令——这就是为什么会出现错误。如果仍要使用动态SQL调用过程,可以将其包装在PL/SQL块中,并绑定ret和msg变量:

sql> exec abc;
但实际上,您不必使用动态sql来执行此过程。你可以简单地调用这个过程

execute immediate 'begin obsproj_full_rebuild(:ret,:msg); end;' using ret, msg;

当我试图执行下面得到相同的错误ret号码;味精varchar2(1000);执行“exec obsproj_full_rebuild(:ret,:msg)”;
CREATE OR REPLACE PROCEDURE abc AS
     ret NUMBER;
     msg VARCHAR2(1000);
BEGIN
     EXECUTE IMMEDIATE 'truncate table OBSPROJ';
     obsproj_full_rebuild(ret,msg);
END abc;