Oracle CREATE TYPE и PL / SQL - PullRequest
       9

Oracle CREATE TYPE и PL / SQL

0 голосов
/ 08 ноября 2011

У нас есть тип 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, оно не определено как тип массива или таблицы, как я обычно вижу. Это работает, но это законное использование, или я должен объявить тип, чтобы иметь некоторый тип массива явно?

Спасибо

Sam

1 Ответ

2 голосов
/ 08 ноября 2011

Я попытался воспроизвести то, что, как вы говорите, происходит, и получил ошибку:

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, который обеспечивает реализацию).Так как это похоже на тип вложенной таблицы, первое звучит более вероятно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...