几年前,我为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
);
答案 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
);
但是既然你告诉我们客户端缺少数据,我就不会在这里开始搜索了。 ; - )