/* @info_TABLA.sql version 1.1 Santiago Velilla 19 Mayo 2014 Dpto. Informática e Ingeniería de Sistemas, Universidad Zaragoza Este script muestra información básica de la tabla cuyo nombre se especifica a través del parámetro del script (&1) uso: @info_TABLA nombre_tabla */ -- SET ECHO ON set linesize 132 set pagesize 200 -- modificar el ancho para columnas de tipo LONG (p.e. el cuerpo de un trigger) SET LONG 1024 column NOMBRE format A18 column OWNER format A12 column CONSTRAINT_NAME format A20 column TABLE_NAME format A16 column SEARCH_CONDITION format A24 column COLUMN_NAME format A16 column POSITION format 99 DEFINE tabla = '&1' -------------------------------------------------------------------- /* la tabla del diccionario USER_CONS_COLUMNS tiene los siguientes atributos: OWNER, CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME, POSITION y especifica los atributos que intervienen en la restricciones definidas por el usuario e identificadas por (OWNER, CONSTRAINT_NAME, TABLE_NAME) ALL_CONS_COLUMNS es similar, pero para las restricciones accesibles al usuario */ -- describe USER_CONS_COLUMNS -- describe ALL_CONS_COLUMNS -- SELECT * FROM USER_CONS_COLUMNS WHERE table_name = UPPER('&tabla'); /* la tabla del diccionario USER_CONSTRAINTS contiene las restricciones definidas por el usuario. Tiene, entre otros, los siguientes atributos: OWNER, CONSTRAINT_NAME y TABLE_NAME que identifican la restricción CONSTRAINT_TYPE, SEARCH_CONDITION que especifican la restricción CONSTRAINT_TYPE VARCHAR2(1) Type of constraint definition: C (check constraint on a table) P (primary key) U (unique key) R (referential integrity) V (with check option, on a view) O (with read only, on a view) ALL_CONSTRAINTS es similar, pero para las restricciones accesibles al usuario */ -- describe USER_CONSTRAINTS -- describe ALL_CONSTRAINTS -- SELECT table_name, constraint_name, constraint_type, search_condition -- FROM user_constraints WHERE table_name = UPPER('&tabla'); PROMPT PROMPT atributos de la tabla &tabla describe &tabla PROMPT PROMPT restricciones definidas sobre la tabla &tabla SELECT b.OWNER, a.TABLE_NAME, a.CONSTRAINT_NAME, a.CONSTRAINT_TYPE, COLUMN_NAME, POSITION, SEARCH_CONDITION FROM USER_CONSTRAINTS a, USER_CONS_COLUMNS b WHERE (b.CONSTRAINT_NAME = a.CONSTRAINT_NAME) AND (a.TABLE_NAME = UPPER('&tabla')); -- especificar formato de las columnas a mostrar column TRIGGER_NAME format a24 column TRIGGERING_EVENT format a30 column TABLE_OWNER format a12 column COLUMN_NAME format a14 column REFERENCING_NAMES format a40 column WHEN_CLAUSE format a20 column DESCRIPTION format a55 column TRIGGER_BODY format a100 column COLUMN_NAME format a30 column DATA_TYPE format a20 column "tipo dato" format a20 column DATA_LENGTH format 999999 column "tamaño" format 999999 PROMPT PROMPT información básica de los atributos de la tabla &tabla PROMPT SELECT column_name "atributo", data_type "tipo dato", data_length "tamaño", nullable, (SELECT SUM(vsize(column_name)) Bytes FROM &tabla) bytes FROM user_tab_columns U_Col WHERE table_name = UPPER('&tabla'); PROMPT PROMPT información básica de los disparadores definidos sobre la tabla &tabla PROMPT -- mostrar todos los disparadores asociados a la tabla, su estado y descripción SELECT TRIGGER_NAME, TABLE_OWNER, STATUS, DESCRIPTION FROM USER_TRIGGERS WHERE TABLE_NAME = UPPER('&tabla'); -- mostrar todos los disparadores asociados a la tabla con su tipo, evento y cláusula when SELECT TRIGGER_NAME, TRIGGER_TYPE, TRIGGERING_EVENT, WHEN_CLAUSE FROM USER_TRIGGERS WHERE TABLE_NAME = UPPER('&tabla'); -- mostrar el programa definido para los disparadores asociados a la tabla SELECT TRIGGER_NAME, TRIGGER_BODY FROM USER_TRIGGERS WHERE TABLE_NAME = UPPER('&tabla'); -- mostrar los segmentos empleados por la tabla y el tamaño que ocupa SELECT SEGMENT_NAME, SEGMENT_TYPE, SUM(BYTES)/1024 "KB" FROM USER_SEGMENTS WHERE SEGMENT_NAME=UPPER('&tabla') GROUP BY SEGMENT_NAME, SEGMENT_TYPE ORDER BY 2,1; /* mostrar los índices asociados a la tabla y su tamaño en KB */ SELECT SEGMENT_NAME Indice, ROUND(SUM(BYTES)/1024) KB FROM USER_SEGMENTS A WHERE SEGMENT_TYPE = 'INDEX' AND SEGMENT_NAME IN (SELECT INDEX_NAME FROM USER_INDEXES WHERE TABLE_NAME=UPPER('&tabla')) GROUP BY SEGMENT_NAME ORDER BY Indice; /* mostrar los índices asociados a la tabla junto con la tabla y el tamaño en bytes */ SELECT B.TABLE_NAME Tabla, A.SEGMENT_NAME Indice, SUM(A.BYTES) Bytes FROM USER_SEGMENTS A, (SELECT INDEX_NAME, TABLE_NAME FROM USER_INDEXES WHERE TABLE_NAME=UPPER('&tabla')) B WHERE A.SEGMENT_TYPE = 'INDEX' AND A.SEGMENT_NAME = B.INDEX_NAME GROUP BY B.TABLE_NAME, A.SEGMENT_NAME ORDER BY Tabla, Indice;