powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / заполнение коллекции по DBLINK
17 сообщений из 17, страница 1 из 1
заполнение коллекции по DBLINK
    #39558010
wellvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Столкнулся с интересным фактом, просьба помочь разобраться! Вкратце, читаю данные из удаленной БД(Oracle 11g) по dbllink, данные помещаю в коллекцию(Nested table), но данные из таблицы считываются не полностью, всегда не больше 100 если использовать LIMIT, без него все хорошо...
В таблице test_r 1000 rows, после заливки данных в коллекцию, с использованием LIMIT - T_COL.count= 60, без использования - T_COL.count=1000)
Обзорно, последовательность действий такова:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
type CA_SE is record
(
id   test.ID%TYPE,
name test.name%TYPE,
key  test.key%TYPE  
);
TYPE NL_CA_SE  IS TABLE OF CA_SE ;
T_COL NL_CA_SE :=NL_CA_SE ();
loop --not all data
  open  v_cur for select * from test_r@dblink;
  fetch v_cur bulk collect into T_COL limit 100;
  exit when v_cur%notfound;
end loop;

 fetch v_cur bulk collect into T_COL  ;--all data from remote table
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558014
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wellvkпоследовательностьпоменять, loop и open - не?
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558015
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wellvkпросьба помочь разобраться!Руки/голова.
wellvkОбзорно, последовательность действий такова:
Код: plsql
1.
2.
loop --not all data
  open  v_cur

Врёшь.
wellvk
Код: plsql
1.
:=NL_CA_SE ();

Бесполезняк.
wellvk
Код: plsql
1.
  exit when v_cur%notfound;

Условие выхода неправильное.
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558017
wellvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tus, опечатка, делал без проверки, естественно, с начало open, затем цикл...
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558019
wellvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Врёшь.
wellvk
Код: plsql
1.
:=NL_CA_SE ();


что не так?
wellvk
Код: plsql
1.
  exit when v_cur%notfound;

Условие выхода неправильное.
T_COL.count<100 результат тот же.
Что упустил?
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558024
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wellvkрезультат тот же.Таки голова. Каждую порцию данных нужно обрабатывать внутри цикла, а не последнюю за ним.
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558025
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wellvkчто не так?удали и сравни.
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558043
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wellvk[/src]
что не так?
wellvk
Код: plsql
1.
  exit when v_cur%notfound;

Условие выхода неправильное.
T_COL.count<100 результат тот же.
Что упустил?[/quot]

http://www.oracle.com/technetwork/issue-archive/2008/08-mar/o28plsql-095155.html

Код: 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.
PROCEDURE process_all_rows (limit_in IN PLS_INTEGER DEFAULT 100)
IS
    CURSOR employees_cur 
    IS 
        SELECT * FROM employees;

    TYPE employees_aat IS TABLE OF employees_cur%ROWTYPE
        INDEX BY PLS_INTEGER;

    l_employees employees_aat;
BEGIN   
    OPEN employees_cur;
    LOOP
        FETCH employees_cur 
            BULK COLLECT INTO l_employees LIMIT limit_in;

        FOR indx IN 1 .. l_employees.COUNT 
        LOOP
            analyze_compensation (l_employees(indx));
        END LOOP;

        EXIT WHEN l_employees.COUNT < limit_in;

   END LOOP;

   CLOSE employees_cur;
END process_all_rows;



авторSo, to make sure that your query processes all 227 rows, replace this statement:


EXIT WHEN
table_with_227_rows_cur%NOTFOUND;

with

EXIT WHEN
l_table_with_227_rows.COUNT = 0;



.....
stax
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558051
wellvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicwellvkчто не так?удали и сравни.
Удалил, сравнил...
Что говорит по этому вопросу ман Nested Tables
в частности:
An uninitialized nested table variable is a null collection. You must initialize it, either by making it empty or by assigning a non-NULL value to it
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558054
Stax http://www.oracle.com/technetwork/issue-archive/2008/08-mar/o28plsql-095155.html Ферштейн ламер. В приведенном тобой примере employees_cur%notfound сработает точно так же, как l_employees.COUNT < limit_in.
Хотя, может в 9i оно работало по другому...
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558055
wellvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicwellvkрезультат тот же.Таки голова. Каждую порцию данных нужно обрабатывать внутри цикла, а не последнюю за ним.
Зачем мне обрабатывать внутри цикла- я заполняю просто коллекцию...Bulk collect на то и дан)
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558063
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда ты чайникStax http://www.oracle.com/technetwork/issue-archive/2008/08-mar/o28plsql-095155.html Ферштейн ламер. В приведенном тобой примере employees_cur%notfound сработает точно так же, как l_employees.COUNT < limit_in.
Хотя, может в 9i оно работало по другому...
авторThe collection is always filled sequentially, starting from index value 1.
It is always safe (that is, you will never raise a NO_DATA_FOUND exception) to iterate through a collection from 1 to collection .COUNT when it has been filled with BULK COLLECT.
The collection is empty when no rows are fetched.
Always check the contents of the collection (with the COUNT method) to see if there are more rows to process.
Ignore the values returned by the cursor attributes, especially %NOTFOUND.




google
авторКолекція завжди заповнюється послідовно, починаючи з значення індексу 1.
Це завжди безпечно (тобто ви ніколи не піднімете виключення NO_DATA_FOUND), щоб ітерації через колекцію від 1 до колекції .COUNT, коли вона була заповнена BULK COLLECT.
Колекція порожня, коли не знайдено жодного рядка.
Завжди перевіряйте вміст колекції (за допомогою методу COUNT), щоб перевірити, чи для обробки є більше рядків.
Ігнорувати значення, що повертаються атрибутами курсору, особливо% NOTFOUND.



ps
exit when v_cur%notfound;
имеет право на жизнь, зависит как/где обрабытывается результат bulk
wellvk не показал как он ето делает
pss
в старой доке был баг

....
stax
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558080
wellvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxтогда ты чайникпропущено...
Ферштейн ламер. В приведенном тобой примере employees_cur%notfound сработает точно так же, как l_employees.COUNT < limit_in.
Хотя, может в 9i оно работало по другому...
авторThe collection is always filled sequentially, starting from index value 1.
It is always safe (that is, you will never raise a NO_DATA_FOUND exception) to iterate through a collection from 1 to collection .COUNT when it has been filled with BULK COLLECT.
The collection is empty when no rows are fetched.
Always check the contents of the collection (with the COUNT method) to see if there are more rows to process.
Ignore the values returned by the cursor attributes, especially %NOTFOUND.




google
авторКолекція завжди заповнюється послідовно, починаючи з значення індексу 1.
Це завжди безпечно (тобто ви ніколи не піднімете виключення NO_DATA_FOUND), щоб ітерації через колекцію від 1 до колекції .COUNT, коли вона була заповнена BULK COLLECT.
Колекція порожня, коли не знайдено жодного рядка.
Завжди перевіряйте вміст колекції (за допомогою методу COUNT), щоб перевірити, чи для обробки є більше рядків.
Ігнорувати значення, що повертаються атрибутами курсору, особливо% NOTFOUND.



ps
exit when v_cur%notfound;
имеет право на жизнь, зависит как/где обрабытывается результат bulk
wellvk не показал как он ето делает
pss
в старой доке был баг

....
stax

Шановний, прочитайте умова, як використовується колекція, в принципі, не важливо.
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558092
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wellvkBulk collect wellvkя заполняюфетчите, и теряете прежний набор, с каждым следующим...
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558107
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wellvkЗачем мне обрабатывать внутри цикла- я заполняю просто коллекцию...Bulk collect на то и дан)Ты ламер, не понимающий, для чего нужен LIMIT.
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558127
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wellvkШановний, прочитайте умова, як використовується колекція, в принципі, не важливо.

не понял,
что значит не важно

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

....
stax
...
Рейтинг: 0 / 0
заполнение коллекции по DBLINK
    #39558712
wellvk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicwellvkЗачем мне обрабатывать внутри цикла- я заполняю просто коллекцию...Bulk collect на то и дан)Ты ламер, не понимающий, для чего нужен LIMIT.
Скорее не LIMIT а концепт BULK COLLECT...сам себя в трех соснах запутал...все спасибо за помощь)
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / заполнение коллекции по DBLINK
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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