执行PL/SQL过程失败



我有一个Ant脚本来执行SQL和PL/SQL过程。

<exec executable="sqlplus" failonerror="true" >         
  <arg value="${user}/${password}@${DB}" />
  <arg value="@${scriptFilename}" />
</exec>

以上代码执行SQL脚本和包,但不执行以下过程:

BEGIN
   -- drop functions
   FOR R IN (
      SELECT owner, object_name
      FROM all_objects
      WHERE owner='FCPOTP'
      AND OBJECT_TYPE IN ('FUNCTION'))
   LOOP
      EXECUTE IMMEDIATE 'drop function '||R.owner||'.'||R.object_name; 
   END LOOP;  
   -- drop procedure
   FOR R IN (
      SELECT owner, object_name
      FROM all_objects
      WHERE owner='FCPOTP'
      AND OBJECT_TYPE IN ('PROCEDURE'))
   LOOP
      EXECUTE IMMEDIATE 'drop procedure '||R.owner||'.'||R.object_name; 
   END LOOP;     
END;

我如何使用相同的exec sqlplus可执行文件来执行所有内容?

您不会得到错误,并且从注释的输出中您不会看到正在执行的块。那是因为事实并非如此。来自文档:

SQL*Plus将您输入的子程序存储在SQL缓冲区中。使用RUN或斜杠(/)命令执行当前子程序。分号(;)被视为PL/SQL子程序的一部分,不会执行该命令。

此刻你的匿名块(子程序)正在进入'SQL缓冲区',但从未被执行。

你只需要添加一个/到你的脚本文件,在你的匿名块之后:

...
   LOOP
      EXECUTE IMMEDIATE 'drop procedure '||R.owner||'.'||R.object_name; 
   END LOOP;     
END;
/

相关内容

  • 没有找到相关文章

最新更新