动态过程执行

时间:2015-07-23 09:04:50

标签: oracle plsql remote-access

嗨,我必须执行远程通话......

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

有人可以建议我如何动态执行存储过程吗?

2 个答案:

答案 0 :(得分:2)

线索在于错误消息的准确措辞: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不带参数,因此空括号是可选的。如果它们让你感到更快乐,请务必包括它们。

答案 1 :(得分:-1)

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

应该有效。

相关问题