powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг PL/SQL объекта
17 сообщений из 17, страница 1 из 1
Парсинг PL/SQL объекта
    #39590010
MaXie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно ли в Oracle "распарсить" PL/SQL-объект так, чтобы получить, как вариант, XML-документ, со всеми элементами и связями данного PL/SQL-объекта.

Пример.

Есть пакет, с единственной процедурой, которая возвращает количество уникальных значений определенного поля в таблице, на момент вызова процедуры.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE PACKAGE PKG 
IS 
    PROCEDURE PR(out_cnt OUT NUMBER);
END;

CREATE PACKAGE BODY PKG 
IS 
    PROCEDURE PR(out_cnt OUT NUMBER)
    IS
        v_cnt NUMBER;
    BEGIN
        SELECT COUNT(DISTINCT FLD)
        INTO v_cnt
        FROM TBL;
        
        out_cnt := v_cnt;
    END;
END;



В данном случае, элементами PL/SQL-объекта являются: пакет PKG , процедура PR , SQL-запрос SELECT с обращением к таблице TBL , поле таблицы FLD , OUT параметр процедуры out_cnt , локальная переменная v_cnt и т.д.
Связи между элементами: пакет PKG - процедура PR - SQL-запрос - таблица TBL - поле FLD , с процедурой PR так же связаны OUT параметр out_cnt , локальная переменная v_cnt , и так далее.

Несколько примитивное объяснение, но достаточное, чтобы понять что необходимо получить на выходе. Нечто подобное(, но в ограниченном объеме) выполняют клиенты для работы в среде Oracle(TOAD, PL/SQL Developer и пр.), когда представляют дерево PL/SQL-объекта.

Возможно ли нечто подобное получить по "готовому" объекту в справочнике БД или по тексту запроса?
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590025
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaXie,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create or replace function f(p_func_in in number) return number is 
  l_func_out number;
  procedure p (p_proc_in in number, p_proc_out out number) is
  begin
    p_proc_out := -p_proc_in;
  end;
begin
  p(p_func_in, l_func_out);
  return l_func_out;
end;
/


В данном случае что является элементами объекта?
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590026
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaXieВозможно ли нечто подобное получить по "готовому" объекту в справочнике БДRTFM Using PL/Scope (FAQ)
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590040
MaXie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторcreate or replace function f(p_func_in in number) return number is
l_func_out number;
procedure p (p_proc_in in number, p_proc_out out number) is
begin
p_proc_out := -p_proc_in;
end;
begin
p(p_func_in, l_func_out);
return l_func_out;
end;
/

В данном случае что является элементами объекта?

Элементы: f, p_func_in, возвращаемое функцией значение, l_func_out, p, p_proc_in, p_proc_out - вроде ни чего не пропустил.

авторRTFM Using PL/Scope (FAQ)

Могу ошибаться, но... PL/Scope может связать определенную процедуру в пакете с определенным полем таблицы, которая используется в запросе данной процедуры? Просьба поправить, если не прав.
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590050
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaXiePL/Scope может связать определенную процедуру в пакете с определенным полем таблицы, которая используется в запросе данной процедуры?RTFM Identifier Types that PL/Scope Collects (FAQ)
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590051
MaXie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую более приближенно к "практике" поставить вопрос.

Есть таблица, в которой есть определенное количество полей. Вокруг нее есть представления, синонимы, пакеты и т.д. Все это по какой то своей логике как то сложно между собой связано, образуя длинные цепочки передачи и преобразования значений полей таблицы. Дальше ставится вопрос: если мы перестанем заполнять поле FLD таблицы, то мы что то где то сломаем? или оно(поле) в конечном итоге ни где "логикой"(PL/SQL-объектами) не используется?
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590058
MaXie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторRTFM Identifier Types that PL/Scope Collects (FAQ)
Благодарю за Ваш ответ. Попробую подробней ознакомиться с данной технологией.


Если у кого то есть еще какие то мысли, просьба поделиться. Спасибо.
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590071
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaXieесли мы перестанем заполнять поле FLD таблицы, то мы что то где то сломаем? или оно(поле) в конечном итоге ни где "логикой"(PL/SQL-объектами) не используется?Самый быстрый способ - rename column :)
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590092
MaXie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторMaXie
если мы перестанем заполнять поле FLD таблицы, то мы что то где то сломаем? или оно(поле) в конечном итоге ни где "логикой"(PL/SQL-объектами) не используется?
Самый быстрый способ - rename column :)

На "бою" и у Заказчика? )

Хотя признаться меня посещали такие мысли, как самый быстрый и точный способ ответа на этот вопрос. Но иногда "логика" крутится в течении всего дня, а то и ночи, т.е. заблокирована на уровне библиотечного кеша.
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590098
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaXieавторMaXie
если мы перестанем заполнять поле FLD таблицы, то мы что то где то сломаем? или оно(поле) в конечном итоге ни где "логикой"(PL/SQL-объектами) не используется?
Самый быстрый способ - rename column :)

На "бою" и у Заказчика? )

Хотя признаться меня посещали такие мысли, как самый быстрый и точный способ ответа на этот вопрос. Но иногда "логика" крутится в течении всего дня, а то и ночи, т.е. заблокирована на уровне библиотечного кеша.

expdp metadata_only
new_database с заглушками tablespace и созданными table
impdp
можно даже на desktop развернуть для проверки
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590104
MaXie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще "пять копеек" к постановке вопроса...

Конечно же, если в моем первоначальном примере:
авторCREATE PACKAGE PKG
IS
PROCEDURE PR(out_cnt OUT NUMBER);
END;

CREATE PACKAGE BODY PKG
IS
PROCEDURE PR(out_cnt OUT NUMBER)
IS
v_cnt NUMBER;
BEGIN
SELECT COUNT(DISTINCT FLD)
INTO v_cnt
FROM TBL;

out_cnt := v_cnt;
END;
END;
вместо таблицы использовалось бы представление, то "парсингу" подлежит и само представление.

Т.е. идея состоит в том, чтобы разобрать("распарсить") все без исключения элементы, до конечных "атомарных"(неделимых). В данном случае представление строится на таблице, значит конечным элементом запроса, по данной ветке разбора , является таблица с ее полями, но только теми, которые используются в представлении, которые в свою очередь используются в процедуре.
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590107
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaXieНа "бою"У разработчика нет Dev DB?
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590108
MaXie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторexpdp metadata_only
new_database с заглушками tablespace и созданными table
impdp
можно даже на desktop развернуть для проверки

Спасибо за Ваш ответ. Анализирую насколько он может быть применен.
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590111
Алекссс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaXie, она может быть задействована в динамическом sql, в т.ч. в лежать в табличных данных
user_source + поиск по таблицам
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590116
MaXie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторУ разработчика нет Dev DB?

У заказчика. Тест может быть не актуальным, не полным, "занят" и много других "причин". Вопрос дискуссионный. )
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590118
MaXie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторMaXie, она может быть задействована в динамическом sql, в т.ч. в лежать в табличных данных
user_source + поиск по таблицам

Абсолютно с Вами согласен! Ну если хотя бы на уровне допущения, что без динамического SQL...
...
Рейтинг: 0 / 0
Парсинг PL/SQL объекта
    #39590273
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaXieавторУ разработчика нет Dev DB?

У заказчика. Тест может быть не актуальным, не полным, "занят" и много других "причин". Вопрос дискуссионный. )

Пустая таблица с метаданными занимает копейки
+ еженежельный/ежедневный metadata import - позволит иметь тестовую базу для первоначальной проверки возможности наката патчей-исправлений

Остается вопрос с dblink, но как правило, dblink с внешними системами документирован, так как завязан на договоры со сторонними организациями/отделами
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг PL/SQL объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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