powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Динамическая обработка записей курсора
15 сообщений из 15, страница 1 из 1
Динамическая обработка записей курсора
    #39560601
DINSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Не могу разобраться с динамической обработкой записей курсора. Задача довольно простая для профи - вывести в цикле значения полей записи динамического курсора, но я что-то не пойму как именно. Помогите, пожалуйста.

Код: 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.
36.
37.
38.
39.
40.
create or replace package rcur as
    -- type tcur sys_refcursor;
    
    function rcur(p_sql varchar2) return sys_refcursor;
    procedure call_me;
    procedure catch_me(scur in sys_refcursor);    
end;
/
create or replace package body rcur as

        function rcur(p_sql varchar2) return sys_refcursor is
            v_ref_cur sys_refcursor;
        begin
            open v_ref_cur for p_sql;
            return v_ref_cur;
        end;
        
         -- Формирует выборку через rcur
        procedure call_me is
        begin
            catch_me(rcur('SELECT 1 v1, 2 v2, 3 v3 FROM dual union all SELECT 1 v1, 2 v2, 3 v3 FROM dual union all SELECT 1 v1, 2 v2, 3 v3 FROM dual'));
        end;
        
        -- Принимает и выводит в цикле
        procedure catch_me(scur in sys_refcursor) is 
            v_string_tx scur%rowtype; -- НУЖНО КАК-ТО ПРИРАВНЯТЬ К ПОЛЯМ КУОСОРА
       begin
           LOOP
              FETCH scur INTO v_string_tx;
              EXIT WHEN scur%NOTFOUND;
              dbms_output.put_line(v_string_tx.v2); -- И ВЫВОДИТЬ ЗДЕСЬ (Названия полей, некоторых, известны, их и надо вывести)
           END LOOP;
        end;

end;        
------------------------------
set serveroutput on size unlimited;
begin
    rcur.call_me;
end;



Буду крайне благодарен за помощь...
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560603
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Динамическое и извлекать ну;но динамически. RTFM DBM_SQL
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560604
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicDBM_SQLDBMS_SQL
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560609
DINSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicElicDBM_SQLDBMS_SQL

Не могли бы вы на приведенном коде показать как?
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560612
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DINSQL
Код: plsql
1.
            dbms_output.put_line(v_string_tx.v2); -- И ВЫВОДИТЬ ЗДЕСЬ (Названия полей, некоторых, известны, их и надо вывести)



Для зачем их присваивать записи и выводить в dbms_output?
Есть мнение, что либо задачу следует переформулировать, либо одно из двух.
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560630
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DINSQLНе могли бы вы на приведенном коде показать как?А ключ от квартиры?
STFF
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560643
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DINSQLElicпропущено...
DBMS_SQL

Не могли бы вы на приведенном коде показать как?

DBMS_SQL.TO_CURSOR_NUMBER + Кайт стр 1231
авторТеперь мы готовы рассмотреть всю подпрограмму, которая может принять практи-
чески любой запрос и сбросить результаты его выполнения в файл операционной сис-
темы (предполагается, что пакет UTL_FILE настроен; эта настройка подробно описана
в приложении А):
....


.....
stax
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560657
DINSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymousDINSQL
Код: plsql
1.
            dbms_output.put_line(v_string_tx.v2); -- И ВЫВОДИТЬ ЗДЕСЬ (Названия полей, некоторых, известны, их и надо вывести)



Для зачем их присваивать записи и выводить в dbms_output?
Есть мнение, что либо задачу следует переформулировать, либо одно из двух.

Да, Андрей, вы правы. Мне нужно каждую строку произвольного курсора передавать в процедуру как параметр. В этой процедуре обрабатывать определенные поля этой строки - изменять их.

Я пока дошел до передачи курсора произвольного запроса в catch_me. Теперь внутри надо выбрать строки из курсора (на этом месте запнулся) и построчно "пропустить" через обрабатывающую процедуру (пока не дошел).
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560664
Этератор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
select *
from xmltable('/ROWSET/ROW/*'
   passing xmltype(dbms_xmlgen.getxml('SELECT 1 v1, 2 v2, 3 v3 FROM dual union all SELECT 1 v1, 2 v2, 3 v3 FROM dual union all SELECT 1 v1, 2 v2, 3 v3 FROM dual'))
   columns row_num number path 'count(preceding::ROW)',
           fie_num number path 'count(preceding-sibling::*)',
           nam varchar2(5) path 'name()',
           val varchar2(10) path 'text()'
);

   ROW_NUM    FIE_NUM NAM   VAL     
---------- ---------- ----- ----------
         0          0 V1    1         
         0          1 V2    2         
         0          2 V3    3         
         1          0 V1    1         
         1          1 V2    2         
         1          2 V3    3         
         2          0 V1    1         
         2          1 V2    2         
         2          2 V3    3         
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560677
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DINSQL Мне нужно каждую строку произвольного курсора передавать в процедуру как параметр. В этой процедуре обрабатывать определенные поля этой строки - изменять их.
Изменять - в курсоре и выдавать наружу в другом курсоре?
Или изменять какие-то данные в БД на основе данных курсора?
Общее количество полей курсора стабильно или может меняться?
Возможно ли применение strong ref cursor?
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560680
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DINSQLвы правы. Мне нужноО, типичный XYZ
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560689
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, если все совсем плохо - то сюда:
2105585
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560705
DINSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymousDINSQL Мне нужно каждую строку произвольного курсора передавать в процедуру как параметр. В этой процедуре обрабатывать определенные поля этой строки - изменять их.
Изменять - в курсоре и выдавать наружу в другом курсоре?
Или изменять какие-то данные в БД на основе данных курсора?
Общее количество полей курсора стабильно или может меняться?
Возможно ли применение strong ref cursor?

Изменить значения полей записи и добавлять в таблицу (другую, есть 2 таблицы - источник и целевая (после обработки))
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560706
DINSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicDINSQLвы правы. Мне нужноО, типичный XYZ

Слушайте, перестаньте флудить. Нечего сказать по делу, промолчите.
...
Рейтинг: 0 / 0
Динамическая обработка записей курсора
    #39560728
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DINSQLElicпропущено...
О, типичный XYZ
Слушайте, перестаньте флудить. Нечего сказать по делу, промолчите.
Вообще-то коллега Elic по делу говорит.
И его предложение воспользоваться DBMS_SQL вполне в духе вопроса.
PL/SQL сам по себе не особо приспособлен для обработки неструктурированных наборов.
Потому я пытался вывести Вас на другие варианты - отказаться от weak RC вообще или в пользу strong RC; Перенести обработку на клиента или выполнить в серверной jvm.
В некоторых случаях уместно будет воспользоваться XML или JSON.

Но это можно сделать только если видеть ~всю задачу ~целиком, а не маленький кусочек, для которого, вероятно, выбрано не самое удачное технологическое решение.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Динамическая обработка записей курсора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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