Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Допы 2012.docx
Скачиваний:
11
Добавлен:
24.09.2019
Размер:
125.27 Кб
Скачать
  1. Для всех связей между таблицами схемы вывести:

- Имя главной таблицы

-имя подчиненной таблицы

-имя первого и второго столбцов первичного ключа

-имя первого и второго столбцов вторичного ключа

-общее число столбцов вторичного ключа

SELECT tPK.table_name pk_table_name, tFK.table_name fk_table_name, tPK.column_name pk_column_name, tPK.column_name2 pk_column_name2, tPK.summ pk_col_sum,

tFK.column_name fk_column_name, tFK.column_name2 fk_column_name2

FROM (SELECT ConstrColPK12.*, ConstrPKSum.summ

FROM (SELECT ConstrColPK1.*, ConstrColPK2.column_name column_name2

FROM (SELECT ConstrPK.constraint_name, ConstrPK.table_name, ConstrColPK.column_name

FROM (

SELECT constraint_name, table_name

FROM user_constraints

WHERE constraint_type = 'P'

) ConstrPK INNER JOIN user_cons_columns ConstrColPK ON ConstrPK.constraint_name = ConstrColPK.constraint_name

WHERE ConstrColPK.position = 1

) ConstrColPK1 LEFT JOIN

(SELECT ConstrPK.constraint_name, ConstrPK.table_name, ConstrColPK.column_name

FROM (

SELECT constraint_name, table_name

FROM user_constraints

WHERE constraint_type = 'P'

) ConstrPK INNER JOIN user_cons_columns ConstrColPK ON ConstrPK.constraint_name = ConstrColPK.constraint_name

WHERE ConstrColPK.position = 2

) ConstrColPK2 ON ConstrColPK1.constraint_name = ConstrColPK2.constraint_name

) ConstrColPK12 LEFT JOIN (

SELECT constraint_name, max(position) summ

FROM user_cons_columns

GROUP BY constraint_name

) ConstrPKSum

ON ConstrColPK12.constraint_name = ConstrPKSum.constraint_name

) tPK RIGHT JOIN

(

SELECT *

FROM (

SELECT ConstrColFK1.*, ConstrColFK2.column_name column_name2

FROM (

SELECT ConstrFK.r_constraint_name, ConstrFK.constraint_name, ConstrFK.table_name, ConstrColFK.column_name

FROM (

SELECT constraint_name, table_name, r_constraint_name

FROM user_constraints

WHERE constraint_type = 'R'

) ConstrFK INNER JOIN user_cons_columns ConstrColFK ON ConstrFK.constraint_name = ConstrColFK.constraint_name

WHERE ConstrColFK.position = 1

) ConstrColFK1 left join

(

SELECT ConstrFK.constraint_name, ConstrFK.table_name, ConstrColFK.column_name

FROM (

SELECT constraint_name, table_name

FROM user_constraints

WHERE constraint_type = 'R'

) ConstrFK INNER JOIN user_cons_columns ConstrColFK ON ConstrFK.constraint_name = ConstrColFK.constraint_name

WHERE ConstrColFK.position = 2

) ConstrColFK2 on ConstrColFK1.constraint_name = ConstrColFK2.constraint_name

)

) tFK ON tPK.constraint_name = tFK.r_constraint_name;