嗨,我必须执行远程通话......
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
有人可以建议我如何动态执行存储过程吗?
答案 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字符串的全局函数,则应该有效。