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

? Имя таблицы;

? Имя первого столбца первого ограничения уникальности;

? Имя второго столбца первого ограничения уникальности;

? Общее число столбцов в первом ограничении уникальности;

? Имя первого столбца второго ограничения уникальности;

? Имя второго столбца второго ограничения уникальности;

? Общее число столбцов во втором ограничении уникальности;

? Общее число ограничений уникальности

СОЗДАЁМ ТАБЛИЦУ:

CREATE TABLE practice (first_name varchar2(25) not null, last_name varchar2(30) not null,

phone varchar(10) not null,Height number(5) not null,weight number(3) not null,age number(2) not null, email varchar2(15) not null,

constraint U1 unique(first_name,last_name,phone), constraint U2 unique(height,weight,age),constraint U3 unique(email));

РЕШЕНИЕ:

select ut.table_name, ans."1'st column unique constr", ans."2'nd column unique constr", ans."Total count 1st unique constr",

ans."1'st column 2'nd unique constr", ans."2'nd column 2'nd unique constr", ans."Total count 2'nd unique constr", ans."Total"

from user_tables ut left join

(SELECT rez1.table_name AS "Table name", rez1.c1 AS "1'st column unique constr",

rez1.c2 AS "2'nd column unique constr",rez1."sum1" AS "Total count 1st unique constr",

rez1.c1_2 AS "1'st column 2'nd unique constr", rez1.c2_2 AS "2'nd column 2'nd unique constr" ,

rez1.sum2 AS "Total count 2'nd unique constr",rez2.Cnt AS "Total"

FROM (SELECT r.table_name, r1.c1,r1.c2,r1."sum1", r1.c1_2, r1.c2_2,r1.sum2

FROM (SELECT table_name, min(zzz) mi

FROM (SELECT t1.*, rownum zzz

FROM (SELECT distinct q.table_name, q.constraint_name

FROM user_constraints q left join user_cons_columns w

ON q.constraint_name = w.constraint_name

WHERE constraint_type = 'U') t1

LEFT JOIN

(SELECT distinct table_name, constraint_name

FROM user_constraints

WHERE constraint_type = 'U') t2

ON t1.table_name = t2.table_name and t1.constraint_name != t2.constraint_name)

group by table_name) r

LEFT JOIN

(SELECT t1.table_name, t1.c1, t1.c2, t1."sum1", t2.table_name table_name2, t2.c1 c1_2, t2.c2 c2_2, t2."sum1" sum2, rownum zzz

FROM (SELECT t1.table_name, c1,c2, t."sum1",t.constraint_name

FROM (SELECT x.table_name,x.column_name c1,y.column_name c2,x.constraint_name

FROM (SELECT q.table_name, q.constraint_name,w.column_name

FROM user_constraints q left join user_cons_columns w

ON q.constraint_name = w.constraint_name

WHERE constraint_type = 'U' and position = 1) x

LEFT JOIN

(SELECT q.constraint_name,w.column_name

FROM user_constraints q left join user_cons_columns w

ON q.constraint_name = w.constraint_name

WHERE constraint_type = 'U' and position = 2) y

ON x.constraint_name = y.constraint_name) t1

INNER JOIN

(SELECT q.constraint_name, max(position) AS "sum1"

FROM user_constraints q left join user_cons_columns w

ON q.constraint_name = w.constraint_name

WHERE constraint_type = 'U'

GROUP BY q.constraint_name) t

ON t1.constraint_name = t.constraint_name) t1

LEFT JOIN

(SELECT t1.table_name, c1,c2, t."sum1",t.constraint_name

FROM (select x.table_name,x.column_name c1,y.column_name c2,x.constraint_name

FROM (select q.table_name, q.constraint_name,w.column_name

FROM user_constraints q left join user_cons_columns w

ON q.constraint_name = w.constraint_name

WHERE constraint_type = 'U' and position = 1) x

LEFT JOIN

(SELECT q.constraint_name,w.column_name

FROM user_constraints q left join user_cons_columns w

ON q.constraint_name = w.constraint_name

WHERE constraint_type = 'U' and position = 2) y

ON x.constraint_name = y.constraint_name) t1

INNER JOIN

(SELECT q.constraint_name, max(position) AS "sum1"

FROM user_constraints q left join user_cons_columns w

ON q.constraint_name = w.constraint_name

WHERE constraint_type = 'U'

GROUP BY q.constraint_name) t

ON t1.constraint_name = t.constraint_name) t2

ON t1.table_name = t2.table_name and t1.constraint_name != t2.constraint_name) r1

ON r.table_name = r1.table_name and r.mi = r1.zzz) rez1

LEFT JOIN

(SELECT table_name, count(*) AS Cnt

FROM (select distinct table_name, constraint_name

FROM user_constraints

WHERE constraint_type = 'U')

GROUP BY table_name) rez2

ON rez1.table_name = rez2.table_name) ans

on ut.table_name = ans."Table name"

order by "Total";