pl/sql レコード タイプをプロシージャに渡す方法:
CREATE OR REPLACE PACKAGE BODY PKGDeleteNumber
AS
PROCEDURE deleteNumber (
list_of_numbers IN List_Numbers
)
IS
i_write VARCHAR2(5);
BEGIN
--do something
END deleteNumber;
END PKGDeleteNumber;
/
この手順では、レコード タイプである をdeleteNumber
使用しました。List_Numbers
同じパッケージ宣言は次のとおりです。
CREATE OR REPLACE PACKAGE PKGDeleteNumber
AS
TYPE List_Numbers IS RECORD (
IID NUMBER
);
TYPE list_of_numbers IS TABLE OF List_Numbers;
PROCEDURE deleteNumber (
list_of_numbers IN List_Numbers
);
END PKGDeleteNumber;
deleteNumber
値のリストを渡す手順を実行する必要があります。テーブルに数値を挿入temp_test
し、カーソル U を使用してデータを取得しました。
SELECT *
BULK COLLECT INTO test1
FROM temp_test;
今、私が使用しているプロシージャを呼び出すために
execute immediate 'begin PKGDELETENUMBER.DELETENUMBER(:1); end;'
using test1;
他にも多くのことを試しました(for loop
、dbms_binding
、など)。pl/sql レコード タイプを引数としてプロシージャに渡すにはどうすればよいですか?
編集:
基本的に、ネイティブの動的SQLのみを使用して、数値のリストを渡したい...
テーブル temp_test defn を追加します (インデックスまたは制約なし):
create table test_temp (
IID number
);
insert
次に、通常のステートメントを使用して 1,2,3,4,5 を挿入します。
このソリューションについては、
In a package testproc
CREATE TYPE num_tab_t IS TABLE OF NUMBER;
CREATE OR REPLACE PROCEDURE my_dyn_proc_test (p_num_array IN num_tab_t) AS
BEGIN
dbms_output.put_line(p_num_array.COUNT);
END;
/
これは、SQL プロンプト/toad DECLARE v_tab testproc.num_tab_t := testproc.num_tab_t(1, 10); から呼び出されます。BEGIN EXECUTE IMMEDIATE 'BEGIN testproc.my_dyn_proc_test(:1); 終わり;' v_tab を使用します。終わり;
これは機能しません。エラーが表示されます。ワークステーションにいないため、現在問題を再現できません。