2017-02-07 26 views
0

У меня вопрос, я строю PLSQL-код для выполнения любой процедуры или функции динамического пути. Я использую таблицу метаданных, чтобы узнать, какой элемент sql я буду выполнять таким образом.Динамические параметры в предложении USING PLSQL

Процесс некоторых коды, чтобы восстановить информацию, чтобы построить аналогичный блок:

V_COMMAND := 'BEGIN PROC_EX(:1,:2,:3,:4); END;'; 

Но проблема в применить команду выполнить немедленной, потому что нужна привязка переменного в предложении USING динамического пути. Я попытался создать переменную String, в которой хранятся все параметры, но когда я выполнил, я получил ошибку ora ORA-01008.

Я создал временный вар для Params хранения:

V_PARAMS := 'IN P_TABLE, IN P_WHERE, OUT O_MESSAGE, OUT O_CODE'; 

где: P_TABLE, P_WHERE, O_MESSAGE и O_CODE переменные, объявленные в коде начинается.

И я выполнил команду так:

EXECUTE IMMEDIATE V_COMMAND USING V_PARAMS; 

возможно ли это переменная отображающих динамическим способом при помощи оговорки?

+0

Спасибо за редактировать мой вопрос, я не знаю, как я не изменить текст в стиле кода. – rbarbalho

ответ

1

Вы ищете DBMS_SQL

Пример использования, который соответствует вашим потребностям:

CREATE OR REPLACE PROCEDURE foo (n NUMBER, square OUT NUMBER) IS 
     BEGIN square := n * n; END;/ 

     CREATE OR REPLACE PROCEDURE bulk_plsql 
     (n DBMS_SQL.NUMBER_TABLE, square OUT DBMS_SQL.NUMBER_TABLE) IS 
     c NUMBER; 
     r NUMBER; 
     BEGIN 
     c := DBMS_SQL.OPEN_CURSOR; 
     DBMS_SQL.PARSE(c, 'BEGIN foo(:bnd1, :bnd2); END;', DBMS_SQL.NATIVE); 
     DBMS_SQL.BIND_ARRAY(c, 'bnd1', n); 
     DBMS_SQL.BIND_ARRAY(c, 'bnd2', square); 
     r := DBMS_SQL.EXECUTE(c); 
     DBMS_SQL.VARIABLE_VALUE(c, 'bnd2', square); 
    END; 
    /
+0

Спасибо за ваш ответ. – rbarbalho