Descripción de tablas

Una de las cosas que suelo necesitar ver de una tabla es, a parte de sus comentarios, las tablas a donde apuntan sus claves foráneas. Y también cual es la clave primaria. Este script permite ver todo eso. Usa vistas user_, pero es fácilmente modificable para utilizar vistas all_. Habrá que pedir entonces también como parámetro el propietario del objeto.
Como veréis, a la izquierda de la clave primaria aparece un asterisco. Después de la lista de columnas hay una sección para las claves foráneas donde se detalla la tabla a la que hace referencia y las columnas de la tabla que estamos describiendo que están involucradas en la clave ajena.

--------------
-- Sección Set
--------------
SET LINES  100
SET HEADING ON
SET VERIFY OFF
-------------------------
-- Definición de columnas
-------------------------
COLUMN CLAVE_PRIMARIA FORMAT A1
COLUMN COLUMN_NAME    FORMAT A20
COLUMN TIPO           FORMAT A15
COLUMN DEFECTO        FORMAT A15
COLUMN COMENTARIO     FORMAT A43
COLUMN COMMENTS       FORMAT A69
COLUMN TABLA_FORANEA  FORMAT A20

-------------
-- Parámetros
-------------
ACCEPT tabla PROMPT "Escribe el nombre de la tabla: "
PROMPT .
----------
-- Selects
----------
PROMPT TABLA
SELECT TABLE_NAME, COMMENTS
FROM   USER_TAB_COMMENTS
WHERE  TABLE_NAME = UPPER( '&&tabla' )
/
SELECT P.PK CLAVE_PRIMARIA,
       M.COLUMN_NAME, 
       M.DATA_TYPE || DECODE( M.DATA_TYPE, 
                              /*************************************/
                              'DATE', NULL, -- Poner aquí los tipos
                              'LONG', NULL, -- de varible para los 
                              'BLOB', NULL, -- que no queramos ver
                              'CLOB', NULL, -- la precisión
                              /*************************************/
                              '(' || TO_CHAR( NVL( M.DATA_PRECISION, 
                                                   M.DATA_LENGTH))||
                              DECODE( M.DATA_SCALE, NULL, NULL, 
                                      ',' ||
                                      TO_CHAR( M.DATA_SCALE ) ) ||
                              ')' ) TIPO,
       M.NULLABLE,
       M.DATA_DEFAULT DEFECTO,
       C.COMMENTS COMENTARIO
FROM   ( SELECT N.TABLE_NAME, L.COLUMN_NAME, '*' PK
         FROM   USER_CONS_COLUMNS L, USER_CONSTRAINTS N
         WHERE  L.CONSTRAINT_NAME = N.CONSTRAINT_NAME
           AND  N.TABLE_NAME = UPPER( '&&tabla' )
           AND  N.CONSTRAINT_TYPE = 'P' ) P, -- Clave primaria
       USER_TAB_COLUMNS M, USER_COL_COMMENTS C
WHERE  M.TABLE_NAME  = C.TABLE_NAME
  AND  M.COLUMN_NAME = C.COLUMN_NAME
  AND  M.TABLE_NAME  = P.TABLE_NAME  (+)
  AND  M.COLUMN_NAME = P.COLUMN_NAME (+)
  AND  M.TABLE_NAME  = UPPER( '&&tabla' )
ORDER BY M.COLUMN_ID
/
PROMPT CLAVE FORÁNEA

BREAK ON TABLA_FORANEA
SELECT A.CONSTRAINT_NAME, B.TABLE_NAME TABLA_FORANEA, C.COLUMN_NAME
FROM   USER_CONS_COLUMNS C, USER_CONSTRAINTS A, USER_CONSTRAINTS B
WHERE  A.R_CONSTRAINT_NAME = B.CONSTRAINT_NAME
  AND  A.CONSTRAINT_NAME   = C.CONSTRAINT_NAME
  AND  A.TABLE_NAME        = UPPER( '&&tabla' )
  AND  A.CONSTRAINT_TYPE   = 'R'
ORDER BY A.CONSTRAINT_NAME, B.TABLE_NAME, C.POSITION
/
SET VERIFY ON
Anuncios