Como obtener el diccionario de datos en Oracle
|A todo desarrollador le llega el momento que acabado el sistema comienza la parte, que yo al menos odio, realizar la documentación del software.
Hace un tiempo había publicado algo similar de Como obtener los datos de las tablas y campos en Oracle, pero esta vez vengo con las consultas SQL un poco mas trabajadas.
Estos sirven de ayuda para no tener que hacerlo todo de cero, eso sí, debes tener bien comentadas las tablas y los campos de cada tabla pero que esto nos ayude de verdad.
Obtener la lista de tablas y sus comentarios:
1 2 3 4 |
SELECT TABLE_NAME TABLA, COMMENTS COMENTARIO FROM USER_TAB_COMMENTS WHERE TABLE_NAME NOT LIKE 'BIN$%' ORDER BY TABLA; |
El siguiente es un poco más complejo, obtenemos los campos, cuales son llave primaria, llave foránea, el tipo de datos, longitud y el comentario:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
SELECT X.TABLE_NAME NOMBRE_TABLA, X.COLUMN_ID POSICION, LLAVE, X.COLUMN_NAME NOMBRE_COLUMNA, DATA_TYPE TIPO_DATO, DATA_LENGTH LONGITUD, COMMENTS COMENTARIO FROM ( SELECT A.TABLE_NAME, A.COLUMN_ID, A.COLUMN_NAME, A.DATA_TYPE, A.DATA_LENGTH, B.COMMENTS FROM USER_TAB_COLUMNS A LEFT JOIN USER_COL_COMMENTS B ON A.TABLE_NAME = B.TABLE_NAME AND A.COLUMN_NAME=B.COLUMN_NAME ) X LEFT JOIN ( SELECT UC.TABLE_NAME, COLUMN_NAME, CASE CONSTRAINT_TYPE WHEN 'P' THEN 'PK' WHEN 'R' THEN 'FK' END LLAVE FROM USER_CONSTRAINTS UC LEFT JOIN USER_CONS_COLUMNS UCC ON UC.CONSTRAINT_NAME = UCC.CONSTRAINT_NAME WHERE UC.CONSTRAINT_TYPE='P' OR UC.CONSTRAINT_TYPE='R' ) Y ON X.TABLE_NAME=Y.TABLE_NAME AND X.COLUMN_NAME = Y.COLUMN_NAME ORDER BY X.TABLE_NAME, X.COLUMN_ID; |
Con este obtenemos la lista de indices que hemos creado, muestra la tabla, el nombre del indice, las columnas que conforman el indice y la posición.
1 2 3 |
SELECT TABLE_NAME TABLA, INDEX_NAME NOMBRE_INDICE, COLUMN_NAME COLUMNA, COLUMN_POSITION POSICION FROM USER_IND_COLUMNS ORDER BY TABLE_NAME, INDEX_NAME, COLUMN_POSITION; |
Con este obtengo la lista de las relaciones que he creado. Muestra el nombre de la relación, el tipo de relación, la tabla, el campo que esta relacionado y también la tabla a la que esta referenciada, para este último dato utilizo de base el R_CONSTRAINT_NAME que contiene el nombre de la llave (nombre de la constraint) a la que hace referencia, aún no he logrado hacer que muestre el nombre de la columna como tal de la columna a la que hace referencia, pero es algo que se puede agregar manualmente a la documentación.
1 2 3 4 5 6 7 8 9 10 |
SELECT UC.CONSTRAINT_NAME NOMBRE_RELACION, CONSTRAINT_TYPE TIPO_RELACION, UC.TABLE_NAME TABLA, UCC.COLUMN_NAME COLUMNA, SUBSTR(R_CONSTRAINT_NAME, 0, LENGTH(R_CONSTRAINT_NAME) - 3) TABLA_REFERENCIADA, UCC.POSITION FROM USER_CONSTRAINTS UC LEFT JOIN USER_CONS_COLUMNS UCC ON UC.CONSTRAINT_NAME = UCC.CONSTRAINT_NAME WHERE UC.CONSTRAINT_NAME LIKE '%_R%' AND UC.CONSTRAINT_NAME NOT LIKE '%_PK' ORDER BY UC.CONSTRAINT_NAME, UC.TABLE_NAME, POSITION; |
Espero que estos les ayude a algunos, al menos para tener un poco con que comenzar la documentación.