Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Курсор и переменное число параметров


Автор: LSD 14.3.2011, 19:08
Есть анонимный PL/SQL блок:
Код

DECLARE

  CURSOR an_cursor IS
    SELECT ...
      FROM ...
     WHERE (col1 IN (...) OR col2 IN (...));

BEGIN

  FOR item IN an_cursor
  LOOP
    ...
  END LOOP;

END;

Вопрос: как объявить курсор так, чтобы туда можно было передать переменное число параметров для IN (TABLE или VARRAY не принципиально)? Проблема в том, что объявление курсора не работает с типами объявленными локально, требует объявлять их глобально, а этот вариант не подходит.

Автор: Zloxa 14.3.2011, 20:21
Цитата(LSD @  14.3.2011,  19:08 Найти цитируемый пост)
Проблема в том, что объявление курсора не работает с типами объявленными локально, требует объявлять их глобально, а этот вариант не подходит. 

Если ты не можешь создать объекта схемы(пусть в схемме гдето сбоку) и не можешь найти подходящего из существующих(select * from all_type_versions where upper(text) like '%TABLE OF NUMBER%'), у меня идей  - нет.

Разве что формировать запрос динамически, либо же представить коллекцию в виде xml.

Добавлено через 9 минут и 24 секунды
ну еще, на крайняк, трюкануть со строкой можно 
Код

where instr(',1,2,3,4,',','||col||',') > 0

Есесно - не продуктивное решение.

Автор: LSD 15.3.2011, 16:48
Цитата(Zloxa @  14.3.2011,  20:21 Найти цитируемый пост)
Если ты не можешь создать объекта схемы(пусть в схемме гдето сбоку) и не можешь найти подходящего из существующих(select * from all_type_versions where upper(text) like '%TABLE OF NUMBER%'), у меня идей  - нет.

Это одноразовый скрипт и DBA не одобрят создание объектов в схеме. Завязываться на какие-то типы которые не в нашей или системной схеме, тоже нехорошо.


Ну нет, так нет. Просто думал, может есть какое очевидное решение, которое я проглядел.

Автор: Zloxa 15.3.2011, 16:59
Цитата(LSD @  15.3.2011,  16:48 Найти цитируемый пост)
DBA не одобрят создание объектов в схеме

Я читал о таких... на форумах.

Я не знаю.. у нас на проде есть отдельная схема, где разрабы могут выполнять свои упражнения.
Разрабы могут создавать там свои объекты схемы, но сохранности этой схемы ДБА не обещает.
Я не однократно во всяких конверсионных, одноразовых, скриптах, пускаемых саппотром из под прода использовал объекты из этой схемы.

Но у нас один аппликейшин - одна инсталляция. Если бы инсталляций аппликейшнов было бы больше, такой подход не хлял бы.

С другой стороны, пачсеты же както накатываются на много инстов? Создание архиважного и архинужного table of varhcar2 можно причислить к какому нить багфиксу.

Автор: LSD 15.3.2011, 17:59
Ну не то чтобы совсем запретят, но будут вопросы: а зачем, а без этого совсем никак. Тут как бы с одной стороны необходимость скопипастить одни и те же ID-шники в нескольких местах скрипта, с другой необходимость убеждать DBA.

Мы однажды 2 месяца добивались прав на пакет DBMS_LOCK, только когда пригрозили создать хранимку на Java, они испугались и дали права smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)