将数组作为参数传递给 plsql 过程
Posted
技术标签:
【中文标题】将数组作为参数传递给 plsql 过程【英文标题】:passing arrays as parameters to plsql procedure 【发布时间】:2016-01-20 08:31:25 【问题描述】:我需要和 sql developer 一起玩,我在这里碰壁了... 我需要对表运行一个简单的更新查询,并且我想传入一个 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 developer 中运行存储过程时,我想输入 SAMPLE_ARRAY 的值。我试过(2222,1111,1234)
和[2222,1111,1234]
和2222,1111,1234
,每次我得到“表达式类型错误”的错误。
我迫切需要这些人的帮助....
【问题讨论】:
【参考方案1】:您没有展示如何为您的可变数组变量赋值。但是,我相信你可以这样做:
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
【讨论】:
如何通过ADO.net感知NUM_ARRAY? @HorribleGuy 抱歉,这超出了我的知识范围。我建议您发布另一个问题并标记 ADO以上是关于将数组作为参数传递给 plsql 过程的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们将字符串数组作为参数传递给 main() 方法,为啥不传递任何集合类型或包装类型或原始类型?