Oracle PL/SQL/System Tables Views/user ind columns

Материал из SQL эксперт
Перейти к: навигация, поиск

Check index column and contraints for just created table

    
SQL>
SQL> create table movie(
  2           movie_no               integer              constraint movie_pk primary key using index (create index movie_pk_idx on movie(movie_no) )
  3          ,title                  varchar2(40)
  4          ,rating                 char(4)
  5          ,type                   varchar2(20)
  6          ,star                   varchar2(40)
  7          ,qty                    number
  8          ,price                  number
  9  );
Table created.
SQL>
SQL> select index_name, table_name, column_name from user_ind_columns where table_name = "MOVIE";
MOVIE_PK_IDX                   MOVIE
MOVIE_NO

1 row selected.
SQL>
SQL> select constraint_name, table_name, column_name from user_cons_columns where table_name = "MOVIE";
MOVIE_PK                       MOVIE
MOVIE_NO

1 row selected.
SQL>
SQL> drop table movie cascade constraints;
Table dropped.



Decode column position

   
SQL>
SQL>
SQL> column table_name format a15 word_wrapped
SQL> column index_name format a25 word_wrapped
SQL> column columns format a40
SQL>
SQL> break on table_name skip 1
SQL>
SQL> select table_name,
  2       index_name,
  3  rtrim(
  4       max( decode( column_position, 1, column_name, "" ) )||","||
  5       max( decode( column_position, 2, column_name, "" ) )||","||
  6       max( decode( column_position, 3, column_name, "" ) )||","||
  7       max( decode( column_position, 4, column_name, "" ) )||","||
  8       max( decode( column_position, 5, column_name, "" ) )||","||
  9       max( decode( column_position, 6, column_name, "" ) )||","||
 10       max( decode( column_position, 7, column_name, "" ) )||","||
 11       max( decode( column_position, 8, column_name, "" ) )||","||
 12       max( decode( column_position, 9, column_name, "" ) )||","||
 13       max( decode( column_position, 10, column_name, "" ) )||","||
 14       max( decode( column_position, 11, column_name, "" ) )||","||
 15       max( decode( column_position, 12, column_name, "" ) )||","||
 16       max( decode( column_position, 13, column_name, "" ) )||","||
 17       max( decode( column_position, 14, column_name, "" ) )||","||
 18       max( decode( column_position, 15, column_name, "" ) )||","||
 19       max( decode( column_position, 16, column_name, "" ) ), "," )
 20       columns
 21  from user_ind_columns
 22  where rownum < 50
 23  group by table_name,index_name
 24  /
TABLE_NAME      INDEX_NAME                COLUMNS
--------------- ------------------------- ----------------------------------------
EMP_CHANGES     SYS_C005784               MSGID
UPPER_ENAME     SYS_IOT_TOP_15816         X$ENAME,X$RID
DEPT_AND_EMP    SYS_C005826               DEPTNO
                SYS_C005827               EMPS
AQ$_EMP_CHANGES SYS_IOT_TOP_16251         MSGID,SUBSCRIBER#,NAME,ADDRESS#
_G
TABLE_NAME      INDEX_NAME                COLUMNS
--------------- ------------------------- ----------------------------------------

AQ$_EMP_CHANGES SYS_IOT_TOP_16249         MSGID,SUBSCRIBER#,NAME,ADDRESS#
_H

AQ$_EMP_CHANGES SYS_IOT_TOP_16254         SUBSCRIBER#,NAME,QUEUE#,MSG_PRIORITY,MSG
_I                                        _ENQ_TIME,MSG_STEP_NO,MSG_CHAIN_NO,MSG_L
                                          OCAL_ORDER_NO,MSGID

TABLE_NAME      INDEX_NAME                COLUMNS
--------------- ------------------------- ----------------------------------------
AQ$_EMP_CHANGES SYS_C005787               SUBSCRIBER_ID
_S

AQ$_EMP_CHANGES SYS_IOT_TOP_16247         NEXT_DATE,TXN_ID,MSGID
_T

COMPILE_SCHEMA_ COMPILE_SCHEMA_TMP_PK     OBJECT_NAME,OBJECT_TYPE
TMP

10 rows selected.
SQL>



Query user_indexes and user_ind_columns table

   
SQL>
SQL>
SQL> SELECT dic.table_name, dic.index_name,
  2         DECODE(di.uniqueness, "UNIQUE", "YES", "NO")uniqueness,
  3         dic.column_position, dic.column_name
  4  FROM   user_indexes di, user_ind_columns dic
  5  WHERE  dic.table_name  = di.table_name
  6  AND    dic.index_name  = di.index_name
  7  and    rownum < 50
  8  ORDER BY dic.table_name, dic.index_name,
  9           di.uniqueness desc, dic.column_position;
no rows selected
SQL>



user_indexes join user_ind_columns ic using (table_name,index_name)

    
SQL>
SQL>
SQL>
SQL> col table_name  format a15
SQL> col index_name  format a15
SQL> col unq         format a9
SQL> col column_name format a15
SQL>
SQL> set linesize 80
SQL>
SQL> break on table_name skip 1 -
>       on index_name        -
>       on unq               -
>       on status
SQL>
SQL> select   table_name
  2  ,        index_name
  3  ,        i.uniqueness as unq
  4  ,        i.status
  5  ,        ic.column_name
  6  from     user_indexes     i  join
  7           user_ind_columns ic using (table_name,index_name)
  8  where    table_name in ("EMP","DEPARTMENTS")
  9  order by table_name
 10  ,        index_name
 11  ,        unq
 12  ,        ic.column_position;
no rows selected
SQL>
SQL> --clear breaks
SQL>