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;