powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / коллекции
25 сообщений из 54, страница 1 из 3
коллекции
    #39463058
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такой вот код у меня есть:
Код: plsql
1.
2.
3.
fetch c1 bulk collect
	into o_r limit rows;
exit when o_r.COUNT = 0;


Делаю дебаг, и он всё вемя уходит на ветку exit.
Почему это происходит?
И как посмотреть что находится в o_r ?
Помогите пожалуйста ((
...
Рейтинг: 0 / 0
коллекции
    #39463069
saxarock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015,

c1 - это что?
...
Рейтинг: 0 / 0
коллекции
    #39463121
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxarockRMagistr2015,

c1 - это что?
Курсор следующего вида:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
cursor c1(n_d number) is
select col1,
        col2,
        col3
    from ttab;
type t_op is table of c1%rowtype;
o_r t_op;
...
Рейтинг: 0 / 0
коллекции
    #39463122
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015saxarockRMagistr2015,

c1 - это что?
Курсор следующего вида:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
cursor c1(n_d number) is
select col1,
        col2,
        col3
    from ttab;
type t_op is table of c1%rowtype;
o_r t_op;



тут ещё и тип и переменная типа есть
...
Рейтинг: 0 / 0
коллекции
    #39463138
saxarock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015,

а курсор открывал прежде чем фетчить?
...
Рейтинг: 0 / 0
коллекции
    #39463149
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxarockRMagistr2015,

а курсор открывал прежде чем фетчить?

Да

Код: plsql
1.
2.
3.
4.
5.
open c1(n_d);
loop
fetch c1 bulk collect
	into o_r limit rows;
exit when o_r.COUNT = 0;
...
Рейтинг: 0 / 0
коллекции
    #39463171
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015Вот такой вот код у меня есть:
Код: plsql
1.
2.
3.
fetch c1 bulk collect
	into o_r limit rows;
exit when o_r.COUNT = 0;


Делаю дебаг, и он всё вемя уходит на ветку exit.
Почему это происходит?
И как посмотреть что находится в o_r ?
Помогите пожалуйста ((
вопрос как посмотреть что находится в o_r ИМЕННО в отладчике?

.....
stax
...
Рейтинг: 0 / 0
коллекции
    #39463233
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015Вот такой вот код у меня есть:
Код: plsql
1.
2.
3.
fetch c1 bulk collect
	into o_r limit rows;
exit when o_r.COUNT = 0;


Делаю дебаг, и он всё вемя уходит на ветку exit.
Почему это происходит?
И как посмотреть что находится в o_r ?
Помогите пожалуйста ((Отладчик умеет отображать только атомарные значения.
Если интересует коллекция - надо смотреть конкретные элементы.
Если коллекция записей или объектов - надо смотреть отдельные атрибуты конкретных элементов.

Я тебе давал более чем наглядный ответ в твоей же теме с таким же именем коллекции .

Если ты абсолютно не способен к обучению - лучше не мучать ни себя ни других.
...
Рейтинг: 0 / 0
коллекции
    #39463241
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015Делаю дебаг, и он всё вемя уходит на ветку exit.
1. Почему это происходит?
2. И как посмотреть что находится в o_r ?
Помогите пожалуйста ((
Дык...
По п.1: Делать fetch с limit без цикла, imho, смысла не имеет -- догда уж проще прямо в select-е указать сколько строк нужно
А по сему оракловый пример написан правильно : Example 12-24 Limiting Bulk FETCH with LIMIT

По п.2: В твоей же теме давал файлик с типовыми примерами работы с коллекциями , в том числе, как смотреть через DBMS_OUTPUT.put_line. Много уважаемых людей там уже ответили как смотреть. Total recall?
...
Рейтинг: 0 / 0
коллекции
    #39463259
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir FilinПо п.1: Делать fetch с limit без цикла, imho, смысла не имеет -- догда уж проще прямо в select-е указать сколько строк нужно


Код: plsql
1.
2.
3.
4.
5.
open c1(n_d);
loop
fetch c1 bulk collect
	into o_r limit rows;
exit when o_r.COUNT = 0;



.....
stax
...
Рейтинг: 0 / 0
коллекции
    #39463289
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015,
stax..
Код: plsql
1.
2.
3.
4.
5.
open c1(n_d);
loop
fetch c1 bulk collect
	into o_r limit rows;
exit when o_r.COUNT = 0;



.....
stax
Виноват, не заметил, извини.
Вот тебе моя "компенсация"
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
DECLARE
 limit_   PLS_INTEGER := 2;

 CURSOR c1  IS
  SELECT 1 col1, 1 col2, 'A' col3 FROM DUAL
  UNION ALL
  SELECT 2 col1, 2 col2, 'B' col3 FROM DUAL
  UNION ALL
  SELECT 3 col1, 3 col2, 'C' col3 FROM DUAL
  UNION ALL
  SELECT 4 col1, 4 col2, 'D' col3 FROM DUAL
  UNION ALL
  SELECT 5 col1, 5 col2, 'E' col3 FROM DUAL;

 TYPE t_op IS TABLE OF c1%ROWTYPE; --определение по курсору
 o_r      t_op := t_op();
 num_     PLS_INTEGER := 0;
BEGIN
 OPEN c1;
 LOOP
  FETCH c1 BULK COLLECT INTO o_r LIMIT limit_;
  IF o_r.COUNT > 0 THEN
   DBMS_OUTPUT.put_line('o_r.COUNT = ' || o_r.COUNT);
   FOR i IN o_r.FIRST .. o_r.LAST LOOP
    DBMS_OUTPUT.put_line('i=' || i || ', o_r (col1, col2, col3): ' || o_r(i).col1 || ', ' || o_r(i).col2 || ', ' || o_r(i).col3);
   END LOOP;
   o_r.delete;
  ELSE
   DBMS_OUTPUT.put_line('o_r is empty!');
  END IF;
  EXIT WHEN c1%NOTFOUND;
 END LOOP;
 CLOSE c1;
END;
/



DBMS Outputo_r.COUNT = 2
i=1, o_r (col1, col2, col3): 1, 1, A
i=2, o_r (col1, col2, col3): 2, 2, B
o_r.COUNT = 2
i=1, o_r (col1, col2, col3): 3, 3, C
i=2, o_r (col1, col2, col3): 4, 4, D
o_r.COUNT = 1
i=1, o_r (col1, col2, col3): 5, 5, E
...
Рейтинг: 0 / 0
коллекции
    #39463303
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015,
оно же с параметром курсора, как у тебя:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
DECLARE
 limit_   PLS_INTEGER := 2;
 n_d_     NUMBER := 10; --для курсора

 CURSOR c1(n_d NUMBER) IS
  SELECT 1 col1, n_d col2, 'A' col3 FROM DUAL
  UNION ALL
  SELECT 2 col1, n_d + 1 col2, 'B' col3 FROM DUAL
  UNION ALL
  SELECT 3 col1, n_d + 2 col2, 'C' col3 FROM DUAL
  UNION ALL
  SELECT 4 col1, n_d + 3 col2, 'D' col3 FROM DUAL
  UNION ALL
  SELECT 5 col1, n_d + 4 col2, 'E' col3 FROM DUAL;

 TYPE t_op IS TABLE OF c1%ROWTYPE; --определение по курсору
 o_r      t_op := t_op();
BEGIN
 OPEN c1(n_d_);
 LOOP
  FETCH c1 BULK COLLECT INTO o_r LIMIT limit_;
  IF o_r.COUNT > 0 THEN
   DBMS_OUTPUT.put_line('o_r.COUNT = ' || o_r.COUNT);
   FOR i IN o_r.FIRST .. o_r.LAST LOOP
    DBMS_OUTPUT.put_line('i=' || i || ', o_r (col1, col2, col3): ' || o_r(i).col1 || ', ' || o_r(i).col2 || ', ' || o_r(i).col3);
   END LOOP;
   o_r.delete;
  ELSE
   DBMS_OUTPUT.put_line('o_r is empty!');
  END IF;
  EXIT WHEN c1%NOTFOUND;
 END LOOP;
 CLOSE c1;
END;
/



DBMS Outputo_r.COUNT = 2
i=1, o_r (col1, col2, col3): 1, 10, A
i=2, o_r (col1, col2, col3): 2, 11, B
o_r.COUNT = 2
i=1, o_r (col1, col2, col3): 3, 12, C
i=2, o_r (col1, col2, col3): 4, 13, D
o_r.COUNT = 1
i=1, o_r (col1, col2, col3): 5, 14, E
...
Рейтинг: 0 / 0
коллекции
    #39463476
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopЕсли ты абсолютно не способен к обучению - лучше не мучать ни себя ни других.
Я буду жить несмотря ни на что, и буду пытаться сделать всё для этого несмотря ни на что, обучаются люди всему в любое время и ничего плохого в этом нет, не думаю что все из нас родились со знанием oracla 11g ))))
Спасибо Вам за помощь, вы явно хотите помочь, спасибо )))
...
Рейтинг: 0 / 0
коллекции
    #39463479
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir FilinRMagistr2015,
stax..
Код: plsql
1.
2.
3.
4.
5.
open c1(n_d);
loop
fetch c1 bulk collect
	into o_r limit rows;
exit when o_r.COUNT = 0;



.....
stax
Виноват, не заметил, извини.
Вот тебе моя "компенсация"
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
DECLARE
 limit_   PLS_INTEGER := 2;

 CURSOR c1  IS
  SELECT 1 col1, 1 col2, 'A' col3 FROM DUAL
  UNION ALL
  SELECT 2 col1, 2 col2, 'B' col3 FROM DUAL
  UNION ALL
  SELECT 3 col1, 3 col2, 'C' col3 FROM DUAL
  UNION ALL
  SELECT 4 col1, 4 col2, 'D' col3 FROM DUAL
  UNION ALL
  SELECT 5 col1, 5 col2, 'E' col3 FROM DUAL;

 TYPE t_op IS TABLE OF c1%ROWTYPE; --определение по курсору
 o_r      t_op := t_op();
 num_     PLS_INTEGER := 0;
BEGIN
 OPEN c1;
 LOOP
  FETCH c1 BULK COLLECT INTO o_r LIMIT limit_;
  IF o_r.COUNT > 0 THEN
   DBMS_OUTPUT.put_line('o_r.COUNT = ' || o_r.COUNT);
   FOR i IN o_r.FIRST .. o_r.LAST LOOP
    DBMS_OUTPUT.put_line('i=' || i || ', o_r (col1, col2, col3): ' || o_r(i).col1 || ', ' || o_r(i).col2 || ', ' || o_r(i).col3);
   END LOOP;
   o_r.delete;
  ELSE
   DBMS_OUTPUT.put_line('o_r is empty!');
  END IF;
  EXIT WHEN c1%NOTFOUND;
 END LOOP;
 CLOSE c1;
END;
/



DBMS Outputo_r.COUNT = 2
i=1, o_r (col1, col2, col3): 1, 1, A
i=2, o_r (col1, col2, col3): 2, 2, B
o_r.COUNT = 2
i=1, o_r (col1, col2, col3): 3, 3, C
i=2, o_r (col1, col2, col3): 4, 4, D
o_r.COUNT = 1
i=1, o_r (col1, col2, col3): 5, 5, E

Вот хоть убей, но я не понял ))) что бы посмотреть содержимое коллекции в отладчике мне в разделе обозначения переменных что нужно написать (там гед просматриваются значения переменных) ? - o_r(i).col3 или o_r.i или o_r.1 ? ))))) Как посмотреть значения по всем полям ? )))
...
Рейтинг: 0 / 0
коллекции
    #39463487
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
open c1(n_d);
loop
fetch c1 bulk collect
	into o_r limit rows;
exit when o_r.COUNT = 0;


Почему он на Exit уходит? (((
...
Рейтинг: 0 / 0
коллекции
    #39463488
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015Почему он на Exit уходит? (((А куда "он" должен "идти" и почему?
...
Рейтинг: 0 / 0
коллекции
    #39463490
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015Vladimir FilinRMagistr2015,
пропущено...

Виноват, не заметил, извини.
Вот тебе моя "компенсация"
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
DECLARE
 limit_   PLS_INTEGER := 2;

 CURSOR c1  IS
  SELECT 1 col1, 1 col2, 'A' col3 FROM DUAL
  UNION ALL
  SELECT 2 col1, 2 col2, 'B' col3 FROM DUAL
  UNION ALL
  SELECT 3 col1, 3 col2, 'C' col3 FROM DUAL
  UNION ALL
  SELECT 4 col1, 4 col2, 'D' col3 FROM DUAL
  UNION ALL
  SELECT 5 col1, 5 col2, 'E' col3 FROM DUAL;

 TYPE t_op IS TABLE OF c1%ROWTYPE; --определение по курсору
 o_r      t_op := t_op();
 num_     PLS_INTEGER := 0;
BEGIN
 OPEN c1;
 LOOP
  FETCH c1 BULK COLLECT INTO o_r LIMIT limit_;
  IF o_r.COUNT > 0 THEN
   DBMS_OUTPUT.put_line('o_r.COUNT = ' || o_r.COUNT);
   FOR i IN o_r.FIRST .. o_r.LAST LOOP
    DBMS_OUTPUT.put_line('i=' || i || ', o_r (col1, col2, col3): ' || o_r(i).col1 || ', ' || o_r(i).col2 || ', ' || o_r(i).col3);
   END LOOP;
   o_r.delete;
  ELSE
   DBMS_OUTPUT.put_line('o_r is empty!');
  END IF;
  EXIT WHEN c1%NOTFOUND;
 END LOOP;
 CLOSE c1;
END;
/



пропущено...


Вот хоть убей, но я не понял ))) что бы посмотреть содержимое коллекции в отладчике мне в разделе обозначения переменных что нужно написать (там гед просматриваются значения переменных) ? - o_r(i).col3 или o_r.i или o_r.1 ? ))))) Как посмотреть значения по всем полям ? )))
Пытаюсь поставить ему o_r.col1 - он мне показывает надпись (collection) и ни как её не расшифровывает ((((
...
Рейтинг: 0 / 0
коллекции
    #39463492
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015ПытаюсьКретин, RTFM DBMS_OUTPUT (FAQ)
...
Рейтинг: 0 / 0
коллекции
    #39463494
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015RMagistr2015пропущено...


Вот хоть убей, но я не понял ))) что бы посмотреть содержимое коллекции в отладчике мне в разделе обозначения переменных что нужно написать (там гед просматриваются значения переменных) ? - o_r(i).col3 или o_r.i или o_r.1 ? ))))) Как посмотреть значения по всем полям ? )))
Пытаюсь поставить ему o_r.col1 - он мне показывает надпись (collection) и ни как её не расшифровывает ((((
Так что ты не смог осилить: три строки текста ниже или картинку?
dbms_photoshopОтладчик умеет отображать только атомарные значения.
Если интересует коллекция - надо смотреть конкретные элементы.
Если коллекция записей или объектов - надо смотреть отдельные атрибуты конкретных элементов.

Я тебе давал более чем наглядный ответ в твоей же теме с таким же именем коллекции .

Если ты абсолютно не способен к обучению - лучше не мучать ни себя ни других.
Атомарные значения могут быть только для скалярных типов.
...
Рейтинг: 0 / 0
коллекции
    #39463498
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015буду пытаться сделать всёВ твоем случае это, видимо, как мартышка тыкать разные кнопки без попыток думать и читать книги/документацию.

А... еще пытаться паразитировать на других, НО главное не думать.
...
Рейтинг: 0 / 0
коллекции
    #39463500
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopRMagistr2015буду пытаться сделать всёВ твоем случае это, видимо, как мартышка тыкать разные кнопки без попыток думать и читать книги/документацию.

А... еще пытаться паразитировать на других, НО главное не думать.
Не ну ))) Да я понимаю, смешно выглядит )) Ну опыт он ко всем приходит ))) Чего тут ))) Руководителей стран вон ругают,Ельцин вон что творил и ему не было стыдно, а я понять пытаюсь что бы потом не быть как Ельцин )))
...
Рейтинг: 0 / 0
коллекции
    #39463501
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicRMagistr2015ПытаюсьКретин, RTFM DBMS_OUTPUT (FAQ)

Не могу я использовать dbms_output.put_line ();
этот код прям в пакете )))) , там вызов процедуры из пакета идёт, потом переходит в пакет и там уже выполняется )))
Ладно, там всё равно select для курсора ничего не выводит, поэтому и на exit переходит ))))
смысл смотреть что-то в структуре... надо с select разбираться
Спасибо всем )))
...
Рейтинг: 0 / 0
коллекции
    #39463547
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема оказалась том, что в select для курсора стоял синоним, который ссылался на таблицу в этой же базе данных, и по условию ничего не могло быть выбрано ))
нужно переделать DBLink на другую базу данных.
Переделываю DBlink, вставляю туда существующую нормальную рабочую ТНС, а он при выполнении выдаёт ошибку -
Код: plsql
1.
2.
3.
4.
5.
6.
ORA-04045: Ошибка во время перекомпиляции/перепроверки <имя пакета>
ORA-04052: Ошибка во время поиска удалённого объекта <схема.таблица@база>
ORA-00604: Ошибка на рекурсивном SQL-уровне 2
ORA-12154: TNS:невозможно разрешить заданный идентификатор соединения
ORA-06508: LP/SQL: невозможно найти вызываемый блок программы: "<имя пакета>"
ORA-04052: на line 2


Вот такие вот ошибки (((
Друзья товарищи, я просто никогда не сталкивался с этим признаюсь честно, книги читал, но без практики это ничего не стоит, вот доходит до практики и...помогите пожалуйста
Премного благодарен за помощь
...
Рейтинг: 0 / 0
коллекции
    #39463554
RMagistr2015Проблема оказалась том, что в select для курсора стоял синоним, который ссылался на таблицу в этой же базе данных, и по условию ничего не могло быть выбрано ))
нужно переделать DBLink на другую базу данных.
Переделываю DBlink, вставляю туда существующую нормальную рабочую ТНС, а он при выполнении выдаёт ошибку -
Код: plsql
1.
2.
3.
4.
5.
6.
ORA-04045: Ошибка во время перекомпиляции/перепроверки <имя пакета>
ORA-04052: Ошибка во время поиска удалённого объекта <схема.таблица@база>
ORA-00604: Ошибка на рекурсивном SQL-уровне 2
ORA-12154: TNS:невозможно разрешить заданный идентификатор соединения
ORA-06508: LP/SQL: невозможно найти вызываемый блок программы: "<имя пакета>"
ORA-04052: на line 2


Вот такие вот ошибки (((
Друзья товарищи, я просто никогда не сталкивался с этим признаюсь честно, книги читал, но без практики это ничего не стоит, вот доходит до практики и...помогите пожалуйста
Премного благодарен за помощьпри чем здесь практика если у тебя нет мозгов..

если для нормальной рабочей тнс возникает ORA-12154 не надо иметь годы практики чтоб разобраться

неужели таким клиническим дятлам еще кто-то деньги за "программирование" платит..
...
Рейтинг: 0 / 0
коллекции
    #39463556
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015Друзья товарищи, я просто никогда не сталкивался с этим признаюсь честно, книги читал, но без практики это ничего не стоит, вот доходит до практики и...помогите пожалуйстаИди по элементарным шагам:
шаг №1:
Код: plsql
1.
desc dual@база
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / коллекции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]