Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 а попроще и без аналитики?  [new]
CloseToSuccess
Member

Откуда:
Сообщений: 23
нужно для каждой таблицы схемы вывести:
1) Имя таблицы
2) Имя первого столбца первичного ключа
3) Имя второго столбца первичного ключа
4) Общее число столбцов первичного ключа
5) Имя первой подчиненной таблицы
6) Имя второй подчиненной таблицы
7) Общее количество подчиненных таблиц у рассматриваемой таблицы
8) Имя первого столбца со значением по умолчанию
9) Первое значение по умолчанию
10) Имя второго столбца со значением по умолчанию
11) Второе значение по умолчанию

решилось кажется так:
define table_name='EMPLOYEES'
with all_table_without_name as(
select user_constraints.constraint_name as consraint_name, user_cons_columns.table_name table_name, user_constraints.constraint_type, data_default ,user_tab_columns.column_name, position,R_CONSTRAINT_NAME 
from user_constraints 
join user_cons_columns 
on user_constraints.constraint_name=user_cons_columns.constraint_name and user_cons_columns.table_name=user_constraints.table_name
join user_tab_columns
on user_tab_columns.table_name=user_cons_columns.table_name and user_tab_columns.column_name=user_cons_columns.column_name),
all_table as (select * from all_table_without_name where table_name='&&table_name'),
pk_first as (select table_name,column_name column_name_pk_first from all_table  
where constraint_type='P' and position=1),
pk_second as (select table_name,column_name column_name_pk_second from all_table  
where constraint_type='P' and position=2
),
pk_count as (select count(column_name) as pk_counts, table_name from all_table  
where constraint_type='P' group by table_name),
dummy_table as (select '&&table_name' table_name from dual),
pk_list as (select pk_first.table_name, pk_first.column_name_pk_first, pk_second.column_name_pk_second, pk_counts from pk_first full join pk_second on pk_first.table_name=pk_second.table_name
full join pk_count on pk_count.table_name=pk_first.table_name),
fk_tables as (select table_name, rownum number_row from all_table_without_name where r_constraint_name in (select consraint_name from all_table group by consraint_name)),
fk_tables_number_one as (select * from (select '&&table_name' table_name,  table_name first_fk_table from fk_tables where number_row=1), (select count(*) fk_count from fk_tables)),
fk_tables_number_two as (select '&&table_name' table_name,  table_name second_fk_table from fk_tables where number_row=2),
fk_tables_numeric_all as (select fk_tables_number_one.table_name table_name, first_fk_table, second_fk_table, fk_count from fk_tables_number_one join fk_tables_number_two on fk_tables_number_one.table_name=fk_tables_number_two.table_name),
fk_tables_numeric as (select dummy_table.table_name table_name, first_fk_table, second_fk_table, fk_count from dummy_table left join fk_tables_numeric_all on dummy_table.table_name=fk_tables_numeric_all.table_name),
default_values as (select table_name, data_default, column_name, rownum number_row from all_table where data_default is not null),
default_value_number_one as (select '&&table_name' table_name, data_default as first_default, column_name first_default_column from default_values where number_row=1),
default_value_number_two as (select '&&table_name' table_name, data_default as second_default, column_name  as second_default_column from default_values where number_row=2),
all_defaults_nulls as (select default_value_number_one.table_name, first_default, first_default_column, second_default, second_default_column from default_value_number_one full join default_value_number_two on default_value_number_one.table_name=default_value_number_two.table_name ),
all_defaults as (select dummy_table.table_name, first_default, first_default_column, second_default, second_default_column from dummy_table left join all_defaults_nulls on dummy_table.table_name=all_defaults_nulls.table_name )
select * from (pk_list natural join fk_tables_numeric) natural join all_defaults; 

просьба не пинать за читабельность, тормознутость и громоздкость, "я только учусь") собственно сабж
18 дек 11, 16:00    [11784769]     Ответить | Цитировать Сообщить модератору
 Re: а попроще и без аналитики?  [new]
Elic
Member

Откуда:
Сообщений: 29990
CloseToSuccess
просьба не пинать за читабельность, тормознутость и громоздкость, "я только учусь") собственно сабж
Да не вопрос. Каждый дятел должен RTFM.
18 дек 11, 16:02    [11784773]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить