我们有一个声明为的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,但它并未定义为数组或表类型,就像我通常看到的那样。它有效,但这是合法用法还是我应该明确声明某种数组类型的类型?
由于
萨姆
答案 0 :(得分:2)
我试图重现你说的正在发生的事情,并收到错误:
CREATE OR REPLACE TYPE its_accountarray;
DECLARE
v its_accountarray := its_accountarray();
BEGIN
null;
END;
/
PLS-00311: the declaration of "ITS_ACCOUNTARRAY" is incomplete or malformed
所以,你可能正在查看错误的类型定义(例如,你在错误的模式中查看它),或者没有查看整个类型定义(例如,有一个提供实现的TYPE BODY)。由于这看起来像嵌套表类型,前者听起来更有可能。