将数组作为参数传递给 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() 方法,为啥不传递任何集合类型或包装类型或原始类型?

VBA ADO 将数组参数传递给存储过程

将对象作为参数传递给函数

将数组作为参数传递给 C 中的函数

使用简单的 jdbc 调用将数组作为输入参数传递给 oracle 存储过程

java字符串数组作为参数传递oracle存储过程