我可以将关联数组传递到Oracle存储过程的大小?

时间:2015-04-28 08:53:28

标签: oracle plsql

几年前,我为Oracle数据库编写了一个导入过程,该数据库将数据加载到表中。数据作为三个单独的关联数组传递给过程。导入代码使用ODP.Net以C#编写,以及PL / SQL中的过程。

客户现在报告表中缺少预期行的问题。传递到存储过程的元素数量或关联数组大小的限制是什么?

过程和数组声明是:

TYPE ArrayOfStoreNumber IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
TYPE ArrayOfStoreName IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
TYPE ArrayOfStoreType IS TABLE OF INTEGER INDEX BY BINARY_INTEGER;

PROCEDURE ImportDestinationStores(
    pStoreNumbers IN ArrayOfStoreNumber,
    pStoreNames IN ArrayOfStoreName,
    pStoreTypes IN ArrayOfStoreType,
    pCount IN BINARY_INTEGER
);

3 个答案:

答案 0 :(得分:2)

从我在文档中看到的内容(Understanding PL/SQL Collection Types),它是无限的。所以这取决于你的RDBMS的内存。

答案 1 :(得分:1)

根据Oracle文档,没有限制。当然,在某个地方,规模有限,但实际上你永远不应达到这样的限制。

答案 2 :(得分:0)

对于大型集合的操作,您应该考虑使用NOCOPY提示。 通常,参数是按值调用的(实际变量的副本传递给函数/过程),但NOCOPY提示将其转换为引用调用(实际变量传递给函数/过程)。 同样的事情适用于返回值。

您只需要扩展您的程序签名:

PROCEDURE ImportDestinationStores(
            pStoreNumbers IN NOCOPY ArrayOfStoreNumber,
            pStoreNames IN NOCOPY ArrayOfStoreName,
            pStoreTypes IN NOCOPY ArrayOfStoreType,
            pCount IN BINARY_INTEGER
);

但是既然你告诉我们客户端缺少数据,我就不会在这里开始搜索了。 ; - )

相关问题