[英]Dynamic parameters in USING clause PLSQL
我有一個問題,我正在構建一個PLSQL代碼以動態方式執行任何過程或功能。 我正在使用元數據表來了解將以這種方式執行的元素sql。
處理一些代碼以恢復信息以構建類似的塊:
V_COMMAND := 'BEGIN PROC_EX(:1,:2,:3,:4); END;';
但是問題在於應用命令立即執行,因為我需要在子句中使用動態方式綁定變量。 我試圖創建一個存儲所有參數的String變量,但是執行時收到ora錯誤ORA-01008
。
我創建了一個臨時變量來存儲參數:
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;
使用子句中動態方式可能映射變量嗎?
您正在尋找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;
/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.