【发布时间】:2011-11-07 20:58:46
【问题描述】:
我们有一个这样声明的 Oracle 类型:
创建或替换类型 its_accountarray;
没有基本类型。然后在过程和包中使用此类型(以及在 Java 存储过程中作为数组描述符)。在过程/包中,它使用 extend 函数添加到数组中。
<declare section>
v_account latax.ITS_ACCOUNTARRAY := new ITS_accountArray();
...
BEGIN
...
...
v_account.extend(1);
在 Java 中,它被用作: oracle.sql.ARRAY ls_accountARRAY, ls_periodARRAY;
oracle.sql.ArrayDescriptor ad = ArrayDescriptor.createDescriptor(**"ITS_ACCOUNTARRAY"**, oconn);
ls_accountARRAY = new ARRAY(ad, oconn, arg_accounts);
ocs.setARRAY(2, ls_accountARRAY);
我很好奇这是如何工作的。即使名称中包含 Array,它也没有像我通常看到的那样定义为数组或表类型。它有效,但这是合法用法还是我应该明确声明该类型为某种数组类型?
谢谢
山姆
【问题讨论】:
-
更新: 我只是想为遇到这个问题的人纠正这个问题:这只是我使用的 Sqltools 版本中的一个显示问题。当我编辑该类型时,它实际上将源部分显示为
CREATE OR REPLACE TYPE its_accountarray这就是我想要的。正文部分“AS TABLE OF...”未显示;显然它在两者之间放置了很多空间,那个身体没有出现在视野中。正如我在下面提到的,SQL*Plus 确实显示正确。新版本的工具做得更好,仍然嵌入了很多空间,但至少在视图中。