使用存储过程中的dbms_utility.compile架构编译无效对象

时间:2016-07-01 02:59:29

标签: sql oracle stored-procedures

我们有一个Oracle存储过程(Package_1.Procedure_1),它根据特定条件更改表和索引。完成此操作后,引用该表的所有其他对象(包,视图等)将变为无效。即使Oracle在下次使用时自动编译无效对象,某个包仍然无效(Package_2)。

在下一次操作中不会直接调用此Package_2,而是在Package_2.Procedure_1内调用Package_1

我在Package_1中使用以下语句来编译无效对象,然后再进行下一步操作:

execute immediate 'Exec dbms_utility.compile_schema(Schema_Name, false)';

包编译但我收到错误:

  

ORA-00900执行时无效的SQL语句(对于上面的代码)。

感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

为什么使用execute immediate执行此活动。您可以直接在包中使用该实用程序。如果您不知道模式名称的值,则可以将变量传递给实用程序。

DECLARE
  v_user VARCHAR2(100);
BEGIN
  v_user := 'DUMMY_USER_NAME';
  DBMS_UTILITY.COMPILE_SCHEMA(v_user);
END;

以上代码对我来说运行良好。