动态过程执行

Dynamic Procedure Execution

嗨,我必须执行远程调用...

DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO@DB_LINK() 

... 来自存储过程。

因为DB_LINK的值是在运行时获取的。它应该动态执行。我尝试使用

 EXECUTE IMMEDIATE ' DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO@'||DB_LINK||'()';

但是我得到以下错误

ORA-00900: invalid SQL statement

谁能告诉我如何动态执行存储过程?

EXECUTE IMMEDIATE 'DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO@'||DB_LINK();
如果 DB_LINK 是一个返回 VARCHAR2 字符串的全局函数,

应该可以工作。

线索在于错误消息的准确措辞:invalid SQL statement。由于 the PL/SQL manual says,EXECUTE IMMEDIATE 用于执行动态 SQL 语句。

您正在执行过程调用,即 PL/SQL 而不是 SQL。所以你需要传递一个匿名块到 EXECUTE IMMEDIATE:

EXECUTE IMMEDIATE 
    'begin  DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO@'||DB_LINK||'() ;  end;' 
    ;

DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO 没有参数,所以空括号是可选的。如果它们让您感到更快乐,请务必包括它们。