Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как получить текстовое тело курсора для динамического sql? / 6 сообщений из 6, страница 1 из 1
01.08.2016, 18:06:45
    #39284141
AxeI
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текстовое тело курсора для динамического sql?
Вопрос следующий:
Можно ли в функции получить строковое тело объявленного в ней курсора для последующей модификации и выполнении через динамический 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
01.08.2016, 18:16:20
    #39284149
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текстовое тело курсора для динамического sql?
AxeI,

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

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

Сделай вью. Да и вообще, сомнительно, что тебе действительно необходима динамика.
...
Рейтинг: 0 / 0
02.08.2016, 14:07:50
    #39284569
Как получить текстовое тело курсора для динамического sql?
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
02.08.2016, 14:16:59
    #39284575
ДергоВьюх
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить текстовое тело курсора для динамического sql?
-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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как получить текстовое тело курсора для динамического sql? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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