Oracle CREATE TYPE和PL / SQL

时间:2011-11-07 20:58:47

标签: oracle plsql

我们有一个声明为的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,但它并未定义为数组或表类型,就像我通常看到的那样。它有效,但这是合法用法还是我应该明确声明某种数组类型的类型?

由于

萨姆

1 个答案:

答案 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)。由于这看起来像嵌套表类型,前者听起来更有可能。