Re[3]: Можно ли сделать такое одним запросом
От: Softwarer http://softwarer.ru
Дата: 14.01.05 09:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А если будет не 2 а 5 таблиц такое можно сделать??


Да собственно нет особой разницы

SQL> with
  2    tables_list as (
  3      select owner, view_name table_name from dba_views
  4      where view_name in ( 'MVIEW_WORKLOAD', 'USER_TAB_COLUMNS', 'KU$_COLUMN_VIEW' )),
  5    number_columns as (
  6      select tc.owner, tc.table_name, column_name,
  7        row_number() over (partition by tc.table_name order by column_name) col_number
  8      from dba_tab_columns tc, tables_list tl
  9      where data_type = 'NUMBER' and tc.owner = tl.owner and tc.table_name = tl.table_name ),
 10    string_columns as (
 11      select tc.owner, tc.table_name, column_name,
 12        row_number() over (partition by tc.table_name order by column_name) col_number
 13      from dba_tab_columns tc, tables_list tl
 14      where data_type = 'VARCHAR2' and tc.owner = tl.owner and tc.table_name = tl.table_name ),
 15    date_columns as (
 16      select tc.owner, tc.table_name, column_name,
 17        row_number() over (partition by tc.table_name order by column_name) col_number
 18      from dba_tab_columns tc, tables_list tl
 19      where data_type = 'DATE' and tc.owner = tl.owner and tc.table_name = tl.table_name),
 20    other_columns as (
 21      select tc.owner, tc.table_name, column_name, data_type,
 22        row_number() over (partition by tc.table_name order by column_name) col_number
 23      from dba_tab_columns tc, tables_list tl
 24      where data_type not in ( 'DATE', 'NUMBER', 'VARCHAR2' ) and tc.owner = tl.owner and tc.table_name = tl.table_name )
 25  select
 26    case when length ( s."number fields:" || s."string fields:" || s."date fields:" || s."other fields:" ) > 0
 27      then s."table:"
 28      else '- - - - - - - -'
 29      end "table:",
 30    s."number fields:", s."string fields:", s."date fields:", s."other fields:"
 31  from (
 32    select
 33      coalesce ( nc.table_name, sc.table_name, dc.table_name, oc.table_name ) "table:",
 34      nc.column_name "number fields:",
 35      sc.column_name "string fields:",
 36      dc.column_name "date fields:",
 37      case when oc.column_name is not null
 38        then oc.column_name || ' (' || oc.data_type || ')'
 39        else null
 40        end "other fields:"
 41    from
 42      number_columns nc full outer join string_columns sc
 43        on ( nc.table_name = sc.table_name and nc.owner = sc.owner and
 44             nc.col_number = sc.col_number )
 45      full outer join date_columns dc
 46        on ( nc.table_name = dc.table_name and nc.owner = dc.owner and
 47             nc.col_number = dc.col_number )
 48      full outer join other_columns oc
 49        on ( nc.table_name = oc.table_name and nc.owner = oc.owner and
 50             nc.col_number = oc.col_number )
 51    order by 1, 2, 3, 4, 5 ) s
 52  group by grouping sets (
 53    (s."table:", s."number fields:", s."string fields:", s."date fields:", s."other fields:"),
 54    (s."table:"))
 55  order by s."table:"
 56  /

table:               number fields:       string fields:       date fields:         other fields:
-------------------- -------------------- -------------------- -------------------- -------------------------
KU$_COLUMN_VIEW      CHARSETFORM          ATTRNAME             SPARE6               CON (KU$_CONSTRAINT0_T)
KU$_COLUMN_VIEW      CHARSETID            DEFAULT_VAL                               LOBMD (KU$_LOB_T)
KU$_COLUMN_VIEW      COL_NUM              NAME                                      OIDINDEX (KU$_OIDINDEX_T)
KU$_COLUMN_VIEW      DEFLENGTH            SPARE4                                    OPQMD (KU$_OPQTYPE_T)
KU$_COLUMN_VIEW      FIXEDSTORAGE         SPARE5                                    TYPEMD (KU$_COLTYPE_T)
KU$_COLUMN_VIEW      INTCOL_NUM                                                     
KU$_COLUMN_VIEW      IS_NULL                                                        
KU$_COLUMN_VIEW      LENGTH                                                         
KU$_COLUMN_VIEW      OBJ_NUM                                                        
KU$_COLUMN_VIEW      OFFSET                                                         
KU$_COLUMN_VIEW      PRECISION_NUM                                                  
KU$_COLUMN_VIEW      PROPERTY                                                       
KU$_COLUMN_VIEW      SCALE                                                          
KU$_COLUMN_VIEW      SEGCOLLENGTH                                                   
KU$_COLUMN_VIEW      SEGCOL_NUM                                                     
KU$_COLUMN_VIEW      SPARE1                                                         
KU$_COLUMN_VIEW      SPARE2                                                         
KU$_COLUMN_VIEW      SPARE3                                                         
KU$_COLUMN_VIEW      TYPE_NUM                                                       
- - - - - - - -                                                                     
MVIEW_WORKLOAD       CARDINALITY          APPLICATION          IMPORT_TIME          QUERY (LONG)
MVIEW_WORKLOAD       FREQUENCY            OWNER                LASTUSE              
MVIEW_WORKLOAD       PRIORITY                                                       
MVIEW_WORKLOAD       QUERYID                                                        
MVIEW_WORKLOAD       RESPONSETIME                                                   
MVIEW_WORKLOAD       RESULTSIZE                                                     
MVIEW_WORKLOAD       WORKLOADID                                                     
- - - - - - - -                                                                     
USER_TAB_COLUMNS     AVG_COL_LEN          CHARACTER_SET_NAME   LAST_ANALYZED        DATA_DEFAULT (LONG)
USER_TAB_COLUMNS     CHAR_COL_DECL_LENGTH CHAR_USED                                 HIGH_VALUE (RAW)
USER_TAB_COLUMNS     CHAR_LENGTH          COLUMN_NAME                               LOW_VALUE (RAW)
USER_TAB_COLUMNS     COLUMN_ID            DATA_TYPE                                 
USER_TAB_COLUMNS     DATA_LENGTH          DATA_TYPE_MOD                             
USER_TAB_COLUMNS     DATA_PRECISION       DATA_TYPE_OWNER                           
USER_TAB_COLUMNS     DATA_SCALE           DATA_UPGRADED                             
USER_TAB_COLUMNS     DEFAULT_LENGTH       GLOBAL_STATS                              
USER_TAB_COLUMNS     DENSITY              NULLABLE                                  
USER_TAB_COLUMNS     NUM_BUCKETS          TABLE_NAME                                
USER_TAB_COLUMNS     NUM_DISTINCT         USER_STATS                                
USER_TAB_COLUMNS     NUM_NULLS            V80_FMT_IMAGE                             
USER_TAB_COLUMNS     SAMPLE_SIZE                                                    
- - - - - - - -                                                                     

42 rows selected
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.