powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PL/SQL список представлений ссылающихся на табл/представление
25 сообщений из 38, страница 1 из 2
PL/SQL список представлений ссылающихся на табл/представление
    #39998783
Jack963
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, мне нужно написать программу, которая выводит список имен представлений, ссылающихся на табл/представление(входной параметр).
Загвоздка в том, что нельзя использовать встроенные средства анализа зависимостей(например, user_dependencies).
Есть ли предложение, каким образом ее можно решить?
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998797
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишите парсер.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998802
Jack963
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,
а можно чуть подробнее?
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998807
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Куда уж подробнее?
Если нельзя использовать результаты работы штатного парсера Oracle rdbms, доступные посредством *_dependencides, остается только написать собственный парсер.
Синтаксические диаграммы можно найти в штатной документации, методы написания парсеров и даже готовые инструменты для облегчения данной задачи - в интернетах.
Всего несколько месяцев плотной работы, и:
- серьезно прокачаете знание синтаксиса sql
- научитесь писать/генерировать парсеры
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998808
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jack963а можно чуть подробнее?

Парсер языка SQL, позволяющий проанализировать исходный текст представлений для получения
списка объектов на которые те ссылаются.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998809
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем и почему нельзя использовать user_dependencies ?

Ну а так, какие проблемы? Скачать Lexx/Yacc (или аналоги) на компьютер, взять Oracle документацию с синтаксисом команд, написать свой парсер SQL... через полгодика может что-то работоспособное и получится.

IMHO & AFAIK
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998812
Jack963
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev, это доп задание в универе. такое тоже нельзя
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998813
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Парсер языка SQL

Пытался такое делать для PL/SQL, что бы строить зависимости библиотек для Oracle Forms. До конца не довел. Основной затык у меня был, что очень сложно разбирать идентификаторы вида schema.package.procedure_in_package в зависимости от контекста.

Минимальную разборку самих команд (прогонял на исходном коде наших пакетов) сделал за пару недель, а с идентификаторами у меня был полный затык.

AFAIK, насколько помню
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998815
Jack963
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous, Это задание в универе, у меня буквально неделя есть
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998817
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда уточняйте постановку и допустимые ограничения.
В общем виде не осилите.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998847
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle сам не разбирает код на лету, это задача компилятора.
Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
SQL> select text from user_views where view_name='USER_DEPENDENCIES';
select o.name,
       decode(o.type#, 0, 'NEXT OBJECT', 1, 'INDEX', 2, 'TABLE', 3, 'CLUSTER',
                      4, 'VIEW', 5, 'SYNONYM', 6, 'SEQUENCE', 7, 'PROCEDURE',
                      8, 'FUNCTION', 9, 'PACKAGE', 10, 'NON-EXISTENT',
                      11, 'PACKAGE BODY', 12, 'TRIGGER',
                      13, 'TYPE', 14, 'TYPE BODY', 22, 'LIBRARY',
                      23, 'DIRECTORY',
                      28, 'JAVA SOURCE', 29, 'JAVA CLASS',
                      32, 'INDEXTYPE', 33, 'OPERATOR',
                      42, 'MATERIALIZED VIEW', 43, 'DIMENSION',
                      46, 'RULE SET', 55, 'XML SCHEMA', 56, 'JAVA DATA',
                      59, 'RULE', 62, 'EVALUATION CONTXT', 87, 'ASSEMBLY',
                      90, 'CREDENTIAL',
                      92, 'CUBE DIMENSION', 93, 'CUBE',
                      94, 'MEASURE FOLDER', 95, 'CUBE BUILD PROCESS',
                      'UNDEFINED'),
       decode(po.linkname, null, pu.name, po.remoteowner), po.name,
       decode(po.type#, 0, 'NEXT OBJECT', 1, 'INDEX', 2, 'TABLE', 3, 'CLUSTER',
                      4, 'VIEW', 5, 'SYNONYM', 6, 'SEQUENCE', 7, 'PROCEDURE',
                      8, 'FUNCTION', 9, 'PACKAGE', 10, 'NON-EXISTENT',
                      11, 'PACKAGE BODY', 12, 'TRIGGER',
                      13, 'TYPE', 14, 'TYPE BODY', 22, 'LIBRARY',
                      23, 'DIRECTORY',
                      28, 'JAVA SOURCE', 29, 'JAVA CLASS',
                      32, 'INDEXTYPE', 33, 'OPERATOR',
                      42, 'MATERIALIZED VIEW', 43, 'DIMENSION',
                      46, 'RULE SET', 55, 'XML SCHEMA', 56, 'JAVA DATA',
                      59, 'RULE', 62, 'EVALUATION CONTXT', 87, 'ASSEMBLY',
                      90, 'CREDENTIAL',
                      92, 'CUBE DIMENSION', 93, 'CUBE',
                      94, 'MEASURE FOLDER', 95, 'CUBE BUILD PROCESS',
                      'UNDEFINED'),
       po.linkname, userenv('SCHEMAID'),
       decode(bitand(d.property, 3), 2, 'REF', 'HARD')
from sys."_CURRENT_EDITION_OBJ" o, sys.disk_and_fixed_objects po,
     sys.dependency$ d, sys.user$ pu
where o.obj# = d.d_obj#
  and po.obj# = d.p_obj#
  and po.owner# = pu.user#
  and o.owner# = userenv('SCHEMAID')

SQL> @ ls dependency$
SYS.DEPENDENCY$                                  83 TABLE     VALID


SQL> desc SYS.DEPENDENCY$
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 D_OBJ#                                    NOT NULL NUMBER
 D_TIMESTAMP                               NOT NULL DATE
 ORDER#                                    NOT NULL NUMBER
 P_OBJ#                                    NOT NULL NUMBER
 P_TIMESTAMP                               NOT NULL DATE
 D_OWNER#                                           NUMBER
 PROPERTY                                  NOT NULL NUMBER
 D_ATTRS                                            RAW(2000)
 D_REASON                                           RAW(2000)
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998858
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andrey_anonymous
Если нельзя использовать результаты работы штатного парсера Oracle rdbms, доступные посредством *_dependencides, остается только написать собственный парсер.

просто парсера недостаточно, надо еще и dbms_utility.expand_sql_text .
ну и еще можно извращенно и попроще:
explain plan for select * from {view}
+ select * from plan_table where object_owner=... and object_type=... and object_name=...

правда потребуется запретить все трансформации, merge/unnest, а по индексам проверять родительские таблицы (ну и optimizer_index_cost_adj задрать максимально, чтобы их поменьше было)
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998900
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jack963
Здравствуйте, мне нужно написать программу, которая выводит список имен представлений, ссылающихся на табл/представление(входной параметр).
Загвоздка в том, что нельзя использовать встроенные средства анализа зависимостей(например, user_dependencies).
Есть ли предложение, каким образом ее можно решить?


К исходному коду можно доступиться через встроенные таблицы.

Например:

Код: plsql
1.
select * from USER_SOURCE where text like '%dual%'



Это самое простое. Оно не отличает комментарии от кода, находит "dual" внутри слова, и т.д.
Для views есть другая таблица, там ковыряться сложнее.

Если надо делать по-взрослому со 100% точностью, то придется городить лексический парсер,
находить синтаксические ошибки - много работы.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #39998917
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Jack963
Здравствуйте, мне нужно написать программу, которая выводит список имен представлений, ссылающихся на табл/представление(входной параметр).
Загвоздка в том, что нельзя использовать встроенные средства анализа зависимостей(например, user_dependencies).
Есть ли предложение, каким образом ее можно решить?


К исходному коду можно доступиться через встроенные таблицы.

Например:

Код: plsql
1.
select * from USER_SOURCE where text like '%dual%'



Это самое простое. Оно не отличает комментарии от кода, находит "dual" внутри слова, и т.д.
Для views есть другая таблица, там ковыряться сложнее.

Если надо делать по-взрослому со 100% точностью, то придется городить лексический парсер,
находить синтаксические ошибки - много работы.


СтругСтргацкиеацкие, сказка о тройке....
— Я параграф двенадцатый знаю получше вашего! Я на нем крокодила съел, собакой закусил! Там сказано — анфас! По-русски понимаете? Ан-фас! Покажите мне, где у этого киселя анфас, и я его целый день снимать буду! Где у него анфас? Где? Ну где? Ну чего же молчите? Я самого господина... того самого... снимал! Я самого этого... как его... ну, в шляпе еще все ходил! Я параграф двенадцатый наизусть!.. А если фаса нет? У господина того самого фас был нормальный! У этого... как его... фас был будь здоров, в три дня не обгадишь! А у этого где?..
...


Мессир
Не надо советовать того, что сам не знаешь

Где в user_sources VIEW?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> select distinct type from dba_source;

TYPE
------------
TYPE BODY
PROCEDURE
FUNCTION
TYPE
LIBRARY
TRIGGER
JAVA SOURCE
PACKAGE BODY
PACKAGE

9 rows selected.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000390
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin
НеофитSQL

Например:

Код: plsql
1.
select * from USER_SOURCE where text like '%dual%'



Это самое простое. Оно не отличает комментарии от кода, находит "dual" внутри слова, и т.д.
Для views есть другая таблица , там ковыряться сложнее.


Где в user_sources VIEW?



Вы не заметили? Они в другой таблице, в неудобном формате.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000425
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
в другой таблице, в неудобном формате.


ЧЯДНТ?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select * from "неудобный формат";
 
select * from "неудобный формат"
 
ORA-00942: table or view does not exist
 
SQL> 
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000429
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

:)

Код: plsql
1.
select * from  USER_VIEWS



текст не разбит на строки, и в каком-то старом формате LONG.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000432
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
текст не разбит на строки, и в каком-то старом формате LONG.

Продолжаем выяснять за "другую таблицу"
ЧЯДНТ?
Код: plsql
1.
2.
3.
4.
5.
6.
SQL> select owner, table_name from dba_tables where table_name like 'USER_VIEWS';
 
OWNER                                                                            TABLE_NAME
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
 
SQL> 
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000433
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
НеофитSQL,

понятно, что не читатель - проблемы со зрением? на пару сообщений выше своего не осилил 22197542 ?


НеофитSQL
в каком-то старом формате LONG.
это просто версия у вас древняя...
USER_VIEWS.TEXT_VC
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000437
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Vadim Lejnin
пропущено...


Где в user_sources VIEW?




Вы не заметили? Они в другой таблице, в неудобном формате.


Я это не "замечал", я это знаю: 22197542

Это Вы не старательно не заметили посыл:
Vadim Lezhnin...
Не надо советовать того, что сам не знаешь
...


Вопрос топика:

Jack963

...
представлений, ссылающихся на табл/представление(входной параметр).
...


Ваш ответ:

НеофитSQL
К исходному коду можно доступиться через встроенные таблицы.

Например:

Код: plsql
1.
select * from USER_SOURCE where text like '%dual%'


...


Это так, для иллюстрации вашего совета:

Код: plsql
1.
2.
3.
SQL> select * from USER_SOURCE where text like '%dual%';

no rows selected



Если советуете, то укажите явно, где и что лежит

И да, получить текст VIEW "не старом" формате, можно специально предназначенным инструментом:
DBMS_METADATA
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000439
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потихоньку, помаленьку, с миру по нитке, у ТС начал сформировываться разумный ответ.

А то сразу "пишите парсер", "не осилите".

Может, ТС просто не знал куда начать смотреть, и как в LONG строку искать.

Код: plsql
1.
2.
3.
4.
5.
-- контекстный поиск слова 'dual' по вьюхам в четыре строки. 
create table easypeasy as
   select view_name, to_lob(text) as text from USER_VIEWS;
select view_name from easypeasy where instr(text,'dual') > 0;
drop table easypeasy;
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000440
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Потихоньку, помаленьку, с миру по нитке, у ТС начал сформировываться разумный ответ.

А то сразу "пишите парсер", "не осилите".

Может, ТС просто не знал куда начать смотреть, и как в LONG строку искать.

Код: plsql
1.
2.
3.
4.
5.
-- контекстный поиск слова 'dual' по вьюхам в четыре строки. 
create table easypeasy as
   select view_name, to_lob(text) as text from USER_VIEWS;
select view_name from easypeasy where instr(text,'dual') > 0;
drop table easypeasy;



Вместо тысячи слов...
Код: plsql
1.
2.
3.
4.
5.
SQL> select view_name, to_lob(text) as text from USER_VIEWS;
select view_name, to_lob(text) as text from USER_VIEWS
                  *
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got LONG




Троль...
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000441
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin,

Там все в порядке, ты просто первую строчку пропустил. Без нее не получится.
Ctrl-C, Ctrl-V.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000465
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Потихоньку, помаленьку, с миру по нитке, у ТС начал сформировываться разумный ответ.
А то сразу "пишите парсер", "не осилите".

1. Попробуйте рассказать, как именно Ваши сообщения помогут ТС решить его задачу по поиску зависимостей.
Ну хотя бы приблизительно.

2. Когда беретесь самообучаться посредством консультирования окружающих: даже на кажущиеся очевидными вопросы имеет смысл отвечать только при уверенности в правильности и полноте ответа не менее чем на на 146%, и то после проверки - имидж клоуна заработать много проще, чем от него избавиться.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000509
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL

Может, ТС просто не знал куда начать смотреть, и как в LONG строку искать.


Не поможет. Во первых ты ищешь dual а в представлении может быть DUAL, dUAL,dUaL... UPPER/LOWER в общем случае не поможет т.к. имя может быть регистро-зависимым. Во вторых твой "метод" выдаст false-positive на представления ссылающиеся на dual как часть имени поля, таблицы... или просто части литерала. В третьих твой "метод" выдаст false-negative например когда FROM clause представления ссылается на синоним на DUAL. В четвертых зависимость может быть неявной - представление ссылается на представление которое ссылается на DUAL или в представлении используется функция которая ссылается на DUAL. Так-что без парсера тут туго. Но ты дерзай .

SY.
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PL/SQL список представлений ссылающихся на табл/представление
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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