2015-07-23 3 views
1

Привет Я должен выполнить удаленный вызов ...Динамический Порядок выполнения

[email protected]_LINK() 

... из хранимой процедуры.

Поскольку значение DB_LINK должно быть получено во время выполнения. Он должен выполняться динамически. Я пытался использовать

EXECUTE IMMEDIATE ' [email protected]'||DB_LINK||'()'; 

Но я получаю следующее сообщение об ошибке

ORA-00900: invalid SQL statement 

Может кто-нибудь сообщить мне о том, как выполнить хранимую процедуру динамически?

+0

Вы можете попробовать: EXECUTE IMMEDIATE «[email protected]'||DB_LINK – Giova

+0

хорошо я не уверен, если это будет работать, но попробуйте это сделать, как этот» || DB_LINK() – Moudiz

+0

До сих пор не работает. Я получаю ту же ошибку. – Saroj

ответ

1

Подсказка заключается в точной формулировке сообщения об ошибке: invalid SQL statement. Как the PL/SQL manual says, EXECUTE IMMEDIATE предназначен для выполнения динамических операторов SQL.

Выполняется вызов процедуры, т.е. PL/SQL, а не SQL. Таким образом, вы должны пройти анонимный блок EXECUTE IMMEDIATE:

EXECUTE IMMEDIATE 
    'begin [email protected]'||DB_LINK||'() ; end;' 
    ; 

DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO не принимает никаких параметров, поэтому пустые скобки не являются обязательными. Обязательно включите их, если они заставят вас чувствовать себя счастливее.

-1
EXECUTE IMMEDIATE '[email protected]'||DB_LINK(); 

должен работать, если DB_LINK является глобальной функцией, возвращающей строку VARCHAR2.

+0

DB_LINK представляется переменной. '()' Принадлежат вызову FLUSH_DATABASE_MONITORING_INFO. – APC

Смежные вопросы