将数组作为参数传递给 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了解更多详情
我需要和 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了解更多详情