将数组作为参数传递给 plsql 过程

passing arrays as parameters to plsql procedure

我需要和 sql 开发人员一起玩,我已经 运行 撞墙了... 我需要 运行 对 table 进行简单的更新查询,我想传入一个 ID 数组并更新这些 ID 指向的所有行。

我写了如下存储过程

PROCEDURE SAMPLE_PROCEDURE(SAMPLE_ARRAY IN NUM_ARRAY)
AS
BEGIN
UPDATE RETURNLIST_PICKLIST_MAPPING 
SET PICKLIST_ID = 1111111 
WHERE RETURNLIST_ID IN (SELECT * FROM TABLE(SAMPLE_ARRAY));
END SAMPLE_PROCEDURE;

NUM_ARRAY是自定义类型,定义如下

create or replace 
TYPE NUM_ARRAY 
AS VARRAY(40) OF NUMBER(38, 0);

当我 运行 sql 开发人员中的存储过程时,我想输入 SAMPLE_ARRAY 的值。我已经尝试了 (2222,1111,1234)[2222,1111,1234] 以及 {2222,1111,1234} 并且每次我都得到 "expression is of wrong type" 错误。

我迫切需要这些人的帮助....

您没有说明您是如何为 varray 变量赋值的。但是,我相信你可以这样做:

DECLARE 
V_T NUM_ARRAY;
BEGIN
V_T := NUM_ARRAY(1,2,3);
SAMPLE_PROCEDURE(V_T);
END;
/

一般来说,您可以定义一个独立的VARRAY如下:

CREATE Or REPLACE TYPE varray_type_name AS VARRAY(n) OF <element_type>;

或者,在 PL/SQL 块内:

TYPE varray_type_name IS VARRAY(n) of <element_type>

参考this了解更多详情