powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PL/SQL список представлений ссылающихся на табл/представление
13 сообщений из 38, страница 2 из 2
PL/SQL список представлений ссылающихся на табл/представление
    #40000514
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jack963

Есть ли предложение, каким образом ее можно решить?


Если над базой можно изгаляться то для валидных представлений можно "воспользоваться" штатным парсером:

Код: 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.
SQL> create table tbl(n number);

Table created.

SQL> create or replace
  2    view tbl_vw
  3      as
  4         select  *
  5           from  tbl
  6  /

View created.

SQL> select status from user_objects where object_name = 'TBL_VW';

STATUS
-------
VALID

SQL> alter table tbl rename to new_tbl;

Table altered.

SQL> select status from user_objects where object_name = 'TBL_VW';

STATUS
-------
INVALID <-- ссылается на TBL

SQL>



SY.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000519
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SY,

Для вьюх все таки explain plan + select *from plan_table легче)
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000522
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender
SY,

Для вьюх все таки explain plan + select *from plan_table легче)


Возни больше.

SY.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000525
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SY,

Чем переименование всех таблиц по очереди?
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000526
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender
SY,

Чем переименование всех таблиц по очереди?


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


Так-что входной параметр это тумблер который rename выключает и смотрим где погас свет. А explain plan это идем к каждой лампочке и смотрим включается ли она через данный тумблер.

SY.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000527
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SY,

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

Если над базой можно изгаляться то для валидных представлений можно "воспользоваться" штатным парсером:

SY.


"Не поможет. Во первых, это не работает для системных таблиц. Во вторых, это требует права на изменения и кратковременной поломки БД. В третьих, это на найдет объекты которые уже находятся в состоянии INVALID т.к. требуют перекомпиляции. Так-что без парсера тут туго. Но ты дерзай .."

Шучу.. Критиковать решение, не предлагая улучшений/исправлений, это было бы пустым брюзжанием с моей стороны :)
Кроме того, было бы несправедливым называть недостатки, о которых автор знает и заранее предупредил, ну например
автор"Если над базой можно изгаляться", или автор"не отличает комментарии от кода, находит "dual" внутри слова, и т.д."

В зависимости от нужд ТС, это решение может быть рабочим в первом приближении, или даже готовым к использованию.
Как часто бывает, ТС ушел, мы можем не узнать для чего это было - для студенческого проекта, или еще для чего.

Лично я дополню свой арсенал этим трюком, так же как другие могут воспользоваться моим примером как искать текст внутри типа LONG, для которого нет удобных встроенных функций.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40000565
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
НеофитSQL
моим примером.
не твой, да ещё и устаревший...
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40005494
Jack963
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, в общем, я решила не самым лучшим методом
Задача решается при помощи таблицы USER_VIEWS (Информация о представлениях, которыми владеет пользователь). Так же для проверки существования входной табл/представления используется табл USER_OBJECTS ( хранятся все объекты, которыми владеет пользователь)
set serveroutput on;
CREATE OR REPLACE PROCEDURE INFORM2 (name_p VARCHAR2)--процедура на вход которой поступает имя табл/представления
as
CURSOR curs_synonym(name_param varchar2)--курсор с параметром, хранит синонимы таблицы(если они есть)
IS
SELECT synonym_name
FROM user_synonyms
WHERE table_name=name_param;


CURSOR curs_user_views--курсор c именами и кодом всех представлений
IS
SELECT view_name, text
FROM user_views;
type word_rec_type is record(
str_text varchar2(4000),
str_name varchar2(128));
type word_tab_type is table of
word_rec_type
index by pls_integer;
word_tab word_tab_type;--индексная таблица с кодом представления и именем
name_upper VARCHAR2(3000);--переменная для имени табл/представления
type word is table of
varchar2(200)
index by pls_integer;
str_output word;--таблица для всех подходящих представлений
output varchar2(2000);--для вывода
s number :=0;--вспомогательная переменная
k number :=0;--вспомогательная переменная
n number :=0;--вспомогательная переменная

begin
name_upper := UPPER(name_p); --переводим все буквы в заглавные
for i in curs_user_views--переводим все коды представлений в loong, т.к. Regexp_Like не работает с long
loop
s:=s+1;
word_tab(s).str_text:=SUBSTR(i.text,1,4000);--переводим тип loong в varchar(т.к. прямой функции перевода нет)
word_tab(s).str_name:=i.view_name;--записываем имя представления
end loop;
s:=0;
select count(*) INTO s --проверяем существует ли табл/представление
from all_objects
where (lower(object_type) in ('table', 'view','synonym')) AND
object_name=name_upper;
if s=0
then raise_application_error(-20005,'Представление или таблица не существует');
end if;
s:=0;

for i in curs_user_views loop--Записывает представление в таблицу, если оно ссылается на предст/табл
s:=s+1;
if regexp_like(word_tab(s).str_text,'.*' || name_p || '(\s|;|,|$).*','i') then--если в коде используется имя предст/табл
n:=n+1;
str_output(n):=word_tab(s).str_name;
end if;
end loop;

for i in curs_synonym(name_p) loop--Записывает представление в таблицу, если оно ссылается на табл через синоним
k:=k+1;
if regexp_like(word_tab(k).str_text,'.*' || i.synonym_name|| '(\s|;|,|$).*','i') then--если в коде используется синоним
n:=n+1;
str_output(n):=word_tab(k).str_name;
end if;
end loop;
if n=0
then raise_application_error(-20005,'Нет ссылающихся представлений');
end if;
for i in 1..(n-1) loop
output:=output||str_output(i)||', ';
end loop;
output:=output||str_output(n)||'.';
dbms_output.put_line(output);--выводим ответ
END;
/
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40005565
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jack963
Ну, в общем, я решила не самым лучшим методом


Поздравляю, главное что добили.

По поводу "не самым лучшим" - вы проанализировали какие у вашего решения могут быть недостатки, и как оно может выгодно отличаться от других решений, которые вы рассматривали?
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40005606
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jack963
SUBSTR(i.text,1,4000)

Т.е. любая длинная вьюха просто обрежется.
...
Рейтинг: 0 / 0
PL/SQL список представлений ссылающихся на табл/представление
    #40005802
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
Jack963
SUBSTR(i.text,1,4000)

Т.е. любая длинная вьюха просто обрежется.


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

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


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