Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как инициализировать массив, описанный в пакете, из другого пакета  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6655
Добрый день!

Столкнулся с непонятной ошибкой:
в одном пакете описано:

CREATE OR REPLACE PACKAGE pack_one IS
                                       
   type tRec is record
      (
         ID             integer,
         Value         varchar2(40)
      );
   type tRecArray is table of tRec index by binary_integer;
   ...
END pack_one;

пытаюсь в процедуре другого пакета написать:

declare
   MyArray  pack_one.tRecArray:=pack_one.tRecArray();

ругается: PLS-00222 no function with name TRECARRAY exists in this scope

что делать? Код без инициализации компилируется нормально:

declare
   MyArray  pack_one.tRecArray;
28 мар 06, 17:14    [2498614]     Ответить | Цитировать Сообщить модератору
 Re: Как инициализировать массив, описанный в пакете, из другого пакета  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Инициализации требуют только nested table. У тебя же index-by table, он инициализации не требует
28 мар 06, 17:17    [2498632]     Ответить | Цитировать Сообщить модератору
 Re: Как инициализировать массив, описанный в пакете, из другого пакета  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6655
кстати, пытаюсь сделать и такое:
declare
   MyArray  pack_one.tRecArray;
begin
   MyArray.Extend(5);

получаю: PLS-00306 wrong number or types of arguments in call to 'EXTEND'

может я тип как-нибудь не так объявил???
Из самого пакета pack_one всё прокатывает.
28 мар 06, 17:35    [2498741]     Ответить | Цитировать Сообщить модератору
 Re: Как инициализировать массив, описанный в пакете, из другого пакета  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Блин, если у нас таблица index by binary_integer НИКАКИХ инициализаций и экстентов делать не надо. Просто пишешь

 MyArray(1):= 1;  -- создается элемент 1
 MyArray(2):= 10;  -- создается элемент 2
........
28 мар 06, 17:38    [2498755]     Ответить | Цитировать Сообщить модератору
 Re: Как инициализировать массив, описанный в пакете, из другого пакета  [new]
Elic
Member

Откуда:
Сообщений: 29976
Кроик Семён
   MyArray.Extend(5);
RTFM Increasing the Size of a Collection (EXTEND Method) (FAQ) со слов "You cannot ..."
28 мар 06, 17:40    [2498764]     Ответить | Цитировать Сообщить модератору
 Re: Как инициализировать массив, описанный в пакете, из другого пакета  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6655
tru55
Блин, если у нас таблица index by binary_integer НИКАКИХ инициализаций и экстентов делать не надо. Просто пишешь


Так ведь это я делаю для того, чтобы значение MyArray.Count равнялось 5 сразу же. Мне это надо в алгоритме.
28 мар 06, 17:46    [2498801]     Ответить | Цитировать Сообщить модератору
 Re: Как инициализировать массив, описанный в пакете, из другого пакета  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6655
OK.
RTFM

To increase the size of a nested table or varray, use EXTEND. You cannot use EXTEND with index-by tables.


Всё ясно. Только вот почему такие пироги проходили внутри пакета pack_one??? Там ведь я EXTEND делал и не получал сообщений об ошибке.
28 мар 06, 17:49    [2498822]     Ответить | Цитировать Сообщить модератору
 Re: Как инициализировать массив, описанный в пакете, из другого пакета  [new]
Elic
Member

Откуда:
Сообщений: 29976
Кроик Семён
Только вот почему такие пироги проходили внутри пакета pack_one??? Там ведь я EXTEND делал и не получал сообщений об ошибке.
У тебя были/есть визуальные галлюцинации.
28 мар 06, 17:52    [2498844]     Ответить | Цитировать Сообщить модератору
 Re: Как инициализировать массив, описанный в пакете, из другого пакета  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6655
Мужики спасибо!
Но я пока ещё трезв.

Пожет это только компиляция прокатила??? Те процедуры я ещё не запускал и может ошибка вылетела бы в runtime?
28 мар 06, 18:01    [2498888]     Ответить | Цитировать Сообщить модератору
 Re: Как инициализировать массив, описанный в пакете, из другого пакета  [new]
Elic
Member

Откуда:
Сообщений: 29976
Кроик Семён
Может это только компиляция прокатила??? Те процедуры я ещё не запускал и может ошибка вылетела бы в runtime?
А ты покажи нам то чудо, а мы тебе - твою ошибку в 17-ой строке.
28 мар 06, 18:21    [2498982]     Ответить | Цитировать Сообщить модератору
 Re: Как инициализировать массив, описанный в пакете, из другого пакета  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6655
Мужики, пардон.

вода действительно закипает при 100 градусах, а 90 - это прямой угол.
28 мар 06, 18:39    [2499098]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить