我的 .NET 代码目前正在使用 ODP.NET 多次调用存储过程来对许多表中的不同行进行操作。.NET 代码有一组要更改的行。每次调用只更改一个参数,我想将数组从.NET 传递到 PL/SQL 以对多行进行操作(行数会改变)。
我已经成功地将一个数组从 .NET 传递到 PL/SQL,使用:
type number_arr is table of number(10) index by pls_integer;
PROCEDURE "BLAH" (foo IN number_arr);
请注意,我相信 number_arr 被称为 VARRAY,但我对此并不积极,如果有人想纠正我,请这样做(作为评论),但这可能会导致我的困惑。
但是现在,在 PL/SQL 中,我有许多以前看起来像这样的更新语句:
UPDATE t SET a = b WHERE a = foo;
当 foo 不是数组时。我现在想写:
UPDATE t SET a = b WHERE a IN (foo);
但是这种语法似乎不起作用。而且我一直无法找到结合使用 VARRAY 和“IN”(或“ANY”等)的 Oracle 示例。我已经看到了一些关于如何使用 SQL Server 执行此操作的答案,但我不确定如何将其转换为 Oracle。
当然,如果有其他方法可以将数组从 .NET 获取到存储过程来执行此操作,那也可以回答我的问题。我希望通过 IN 提高效率,因此在 PL/SQL 中迭代数组的内容(分别调用 UPDATE 语句)可能无济于事。