如何将 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; 结尾;
这不起作用。这显示错误。我不在我的工作站,所以现在无法重现该问题。