簡體   English   中英

USING子句PLSQL中的動態參數

[英]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_TABLEP_WHEREO_MESSAGEO_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM