powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как получить текстовое тело курсора для динамического sql?
6 сообщений из 6, страница 1 из 1
Как получить текстовое тело курсора для динамического sql?
    #39284141
AxeI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос следующий:
Можно ли в функции получить строковое тело объявленного в ней курсора для последующей модификации и выполнении через динамический sql?

Вроде функции пакета:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
function subunit (idu in tunit.idunit%type) return t_subunit pipelined 
as

cursor c_subunit 
     is
     SELECT codokpo, idunit FROM tunit;
str1 varchar(4000);  

TYPE curtype IS REF CURSOR;
src_cur  curtype;
       
 begin

!!!что-то типа str1:= ПОЛУЧАЕМ_ТЕКСТ_КУРСОРА(c_subunit);  !!!  ---:= 'SELECT codokpo, idunit FROM tunit;' 

OPEN src_cur FOR str1;

-- Пошел цикл LOOP--

end;



Дело в банальном личном удобстве при правке в будущем - синтаксис курсора мне проще читать и с его синтаксисом проще работать, чем с динамическим.
...
Рейтинг: 0 / 0
Как получить текстовое тело курсора для динамического sql?
    #39284149
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeI,

c_subunit_a number := $$plsql_line;
...
c_subunit_b number := $$plsql_line;
...
Рейтинг: 0 / 0
Как получить текстовое тело курсора для динамического sql?
    #39284192
AxeI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я получу номера строк. Мне же нужно выдернуть текст из тела курсора. Ну или из тела функции пакета.

Как получить то, из чего можно вырезать нужную сердцевину?
...
Рейтинг: 0 / 0
Как получить текстовое тело курсора для динамического sql?
    #39284205
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeI,

Сделай вью. Да и вообще, сомнительно, что тебе действительно необходима динамика.
...
Рейтинг: 0 / 0
Как получить текстовое тело курсора для динамического sql?
    #39284569
AxeIЯ получу номера строк. Мне же нужно .... Ну или из тела функции пакета.

Как получить то, из чего можно вырезать нужную сердцевину?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select line, text
  from all_source a
 where type = 'PACAGE BODY' and name = <имя пакета>
   and line between (select min(line)
                       from all_source a
                      where type = 'PACAGE BODY' and name = <имя пакета>
                        and text like '%cursor  c_subunit%')
   and (select min(line)
          from all_source a
         where type = 'PACAGE BODY' and name = <имя пакета>
           and text like '%;%'
           and line >= (select min(line)
                       from all_source a
                      where type = 'PACAGE BODY' and name = <имя пакета>
                        and text like '%cursor  c_subunit%')
...
Рейтинг: 0 / 0
Как получить текстовое тело курсора для динамического sql?
    #39284575
ДергоВьюх
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,

+1

Но если нужно дернуть из вьюхи то:
Код: 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 set_create_begin_select
  (
  p_name_view           in             varchar2,                                -- Имя представления из которого получим текст запроса
  p_select              in out nocopy  varchar2                                 -- В эту переменную вернем текст
  )
is
  l_pos                                number;
begin
  -- Получаем запрос
  select vv.text
    into p_select
    from user_views vv
   where vv.view_name   = upper(p_name_view);
  --
  l_pos := instr(p_select, '-- SKIP --');
  if l_pos > 0 then
    p_select := substr(p_select, 1, l_pos - 1);
  end if;
  -- Удаляем служебную информацию
  p_select := replace(p_select, 'with read only', '') || '-- динамическое дополнение' || cnPS;
exception
  when NO_DATA_FOUND then
    p_select := null;
    raise_application_error(-20001, 'Запрос не найден!');
end;
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как получить текстовое тело курсора для динамического sql?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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