Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
РоманРХ
Зарегистрирован: 18.07.2005 Сообщения: 6
|
Добавлено: Пн Июл 18 2005 12:54 Заголовок сообщения: какая вьюха покажет на какой PRIMARY ссылается FOREIGN KEY ? |
|
|
в каком представлении можно увидеть на какой PRIMARY KEY ссылается FORAIGN KEY...
хочу найти таблицы, у которых первычный ключ есть, но на него никто не ссылается (т.е. нет в остальных таблицах соответствующего ему вторичного ключа)
....где то в словаре данных ведь наверняка есть информация куда указывает вторичный ключ...
я уже почти половину рабочего дня убил в поисках где это лежит и так и не нашел...
all_constraints не помогает (по крайней мере его одного не достаточно)... _________________ не уверен - не утверждай, но и не молчи! |
|
Вернуться к началу |
|
|
Arbiter
Зарегистрирован: 25.03.2005 Сообщения: 10
|
Добавлено: Ср Авг 10 2005 19:08 Заголовок сообщения: |
|
|
А в чем проблема? В этой вьюхе все и есть:
select index_name, table_name, constraint_name, constraint_type
from user_constraints a
where not exists (select *
from user_constraints b
where a.constraint_name = b.r_constraint_name)
and trim (a.constraint_type) = 'P'
Enjoy |
|
Вернуться к началу |
|
|
РоманРХ
Зарегистрирован: 18.07.2005 Сообщения: 6
|
Добавлено: Чт Авг 11 2005 11:18 Заголовок сообщения: |
|
|
Arbiter...
спасибо что ответил!
одна непонятность есть:
trim ведь в данном случае ничего не изменяет...
зачем она тут? _________________ не уверен - не утверждай, но и не молчи! |
|
Вернуться к началу |
|
|
Arbiter
Зарегистрирован: 25.03.2005 Сообщения: 10
|
Добавлено: Чт Авг 11 2005 12:19 Заголовок сообщения: |
|
|
РоманРХ писал(а): | Arbiter...
одна непонятность есть:
trim ведь в данном случае ничего не изменяет...
зачем она тут? |
Привычка. Очень часто работал с вьюхами, у которых значение поля типа 'P ' (c пробелами). |
|
Вернуться к началу |
|
|
РоманРХ
Зарегистрирован: 18.07.2005 Сообщения: 6
|
Добавлено: Чт Авг 11 2005 16:12 Заголовок сообщения: |
|
|
Arbiter писал(а): | А в чем проблема? В этой вьюхе все и есть:
select index_name, table_name, constraint_name, constraint_type
from user_constraints a
where not exists (select *
from user_constraints b
where a.constraint_name = b.r_constraint_name)
and trim (a.constraint_type) = 'P'
Enjoy |
БРАТ!
Потрать, пожалуйста, время на объяснение, что это за конструкция такая not exists
логика понятна, но нигде определения такого не нашел даже в
Oracle9i PL-SQL Скотт Урман, изд. Лори, 2004 сентябрь
я что то не просекаю как оно отрабатывает в самой себе
... и честно говоря конкретно запутался в этом. _________________ не уверен - не утверждай, но и не молчи! |
|
Вернуться к началу |
|
|
РоманРХ
Зарегистрирован: 18.07.2005 Сообщения: 6
|
Добавлено: Пт Авг 12 2005 09:28 Заголовок сообщения: |
|
|
Arbiter писал(а): | А в чем проблема? В этой вьюхе все и есть:
select index_name, table_name, constraint_name, constraint_type
from user_constraints a
where not exists (select *
from user_constraints b
where a.constraint_name = b.r_constraint_name)
and trim (a.constraint_type) = 'P'
Enjoy |
Слушай!
Удивительно как ты меня загнал в ступор...
я над твоим запросом кумекаю как никогда долго!
по первой моей мысли о твоём запросе я его у себя в голове переложил в такой вот вид
select index_name, table_name, constraint_name, constraint_type
from user_constraints
where constraint_type = 'P'
minus
select index_name, table_name, constraint_name, constraint_type
from user_constraints
where constraint_name = r_constraint_name
но твой запрос и то во что я его сначала переделал - абсолютно разные вещи!
это совсем другая логика отбора! как же я сначала ошибся!
not exists (select *
from user_constraints b
where a.constraint_name = b.r_constraint_name)
я не могу найти нигде описание такого действа...
кроме этого я уверен, что ты явно знаешь какую то тонкость в отношении представления ...._constaints, которая и позволила тебе найти такое решение, что твой запрос выдаст именно тот результат какой надо!
а ну давай колись! ))
иначе на твоей совести будет один сошедший с ума ДБА
я ещё методом тыка решил найти среди полученных таким образом таблиц хоть одну неверную - пока не нашел.... _________________ не уверен - не утверждай, но и не молчи! |
|
Вернуться к началу |
|
|
Arbiter
Зарегистрирован: 25.03.2005 Сообщения: 10
|
Добавлено: Пт Авг 12 2005 10:47 Заголовок сообщения: |
|
|
Мой запрос расписывается так:
Код: |
select index_name, table_name, constraint_name, constraint_type
from user_constraints
where constraint_type = 'P'
minus
select a.index_name, a.table_name, a.constraint_name, a.constraint_type
from user_constraints a, user_constraints b
where a.constraint_name = b.r_constraint_name
and a.constraint_type = 'P'
|
А конструкция not exists не выбирает записи основного селекта, когда для него есть хотя бы одна запись в подселекте. |
|
Вернуться к началу |
|
|
РоманРХ
Зарегистрирован: 18.07.2005 Сообщения: 6
|
Добавлено: Пт Авг 12 2005 11:11 Заголовок сообщения: |
|
|
Arbiter писал(а): | А в чем проблема? В этой вьюхе все и есть:
Enjoy |
всё!
разобрался!
не трать на меня время!
это я просто что то два дня тормозил...
всё просто - что за заморочки у меня возникли - сам сейчас не пойму!
бывают же блин помутнения сознания!
))
тебе спасибо большое! _________________ не уверен - не утверждай, но и не молчи! |
|
Вернуться к началу |
|
|
РоманРХ
Зарегистрирован: 18.07.2005 Сообщения: 6
|
Добавлено: Пн Авг 15 2005 08:36 Заголовок сообщения: |
|
|
Arbiter писал(а): | Мой запрос расписывается так:
Код: |
select
...
...
...
= 'P'
|
А конструкция not exists не выбирает... |
странно на этом форуме работает ответ-вопрос
медлено
я когда сказал что разобрался - твоего ответа не было
а сегодня он есть, и ответ по времени раньше моего... _________________ не уверен - не утверждай, но и не молчи! |
|
Вернуться к началу |
|
|
|