Accediendo a las tablas del sistema de Oracle
En este artículo vamos a ver como acceder a las tablas del sistema de Oracle, para poder obtener información sobre las bases de datos, por ejemplo las tablas de una base de datos, los campos de los que consta, los procedimientos almacenados, las claves primarias, etc.
Esta información nos puede ser bastante útil por ejemplo para documentar la base de datos de forma automática, para crear los procedimientos almacenados automáticamente en función de los campos de las tablas o cualquier otra utilidad que se nos ocurra.
En el trabajo me he creado un generador de procedimientos almacenados que crea los PA de inserción, modificación, borrado y consulta de cualquier tabla de la base de datos, el cual nos está ahorrando mucho esfuerzo y horas de desarrollo a todo el equipo. La base de datos sobre la que estamos desarrollando la cambian continuamente, por lo que hay que rehacer los procedimientos almacenados cada dos por tres y gracias a está herramienta es automática la actualización de los PA.
A continuación paso a especificar algunas de las consultas a las tablas del sistema que pueden resultar de mayor utilidad:
La consulta que nos devuelve todas las tablas es la siguiente:
SELECT TABLE_NAME FROM USER_TABLES
Para obtener información sobre los campos o columnas de la tabla “NOMBRE_DE_LA_TABLA”, incluyendo el nombre del campo, el tipo de datos (incluyendo precisión y escala si procede), si admite nulos y los comentarios que tenga asociados utilizaremos la siguiente consulta:
SELECT COLS.*, COM.COMMENTS FROM SYS.ALL_TAB_COLUMNS COLS LEFT JOIN SYS.ALL_COL_COMMENTS COM ON COLS.TABLE_NAME = COM.TABLE_NAME AND COLS.COLUMN_NAME = COM.COLUMN_NAME WHERE COLS.OWNER = USER AND COM.OWNER = USER AND COLS.TABLE_NAME = 'NOMBRE_DE_LA_TABLA'
Si queremos obtener los campos que forman la clave principal o primary key (PK) de la tabla “NOMBRE_DE_LA_TABLA” usaremos:
SELECT CONS.TABLE_NAME, COLS.COLUMN_NAME, COMMENTS FROM SYS.ALL_CONSTRAINTS CONS, SYS.ALL_IND_COLUMNS COLS LEFT JOIN SYS.ALL_COL_COMMENTS COM ON COLS.TABLE_NAME = COM.TABLE_NAME AND COLS.COLUMN_NAME = COM.COLUMN_NAME WHERE COLS.INDEX_OWNER = USER AND CONS.OWNER = USER AND COM.OWNER = USER AND CONS.CONSTRAINT_TYPE = 'P' AND CONS.CONSTRAINT_NAME = COLS.INDEX_NAME AND CONS.TABLE_NAME ='NOMBRE_DE_LA_TABLA'
Para obtener la información de todos los triggers de la base de datos, incluyendo su nombre, código fuente del trigger, el evento que lo dispara, la tabla a la que esta asociado, etc:
SELECT * FROM SYS.ALL_TRIGGERS WHERE OWNER = USER
La siguiente consulta nos devolverá todas las claves foráneas (FK’s) de la tabla “NOMBRE_DE_LA_TABLA”
SELECT * FROM SYS.ALL_CONSTRAINTS WHERE OWNER = USER AND TABLE_NAME ='NOMBRE_DE_LA_TABLA' AND CONSTRAINT_TYPE = 'R'
Por último la siguiente solicitud a la base de datos nos devolverá el código fuente de todos los paquetes de la base de datos, incluyendo tanto la cabecera como el cuerpo. Se devuelve un registro por cada línea del paquete.
SELECT * FROM SYS.ALL_SOURCE WHERE OWNER = USER AND INSTR(SYS.ALL_SOURCE.TYPE,'PACKAGE') > 0 ORDER BY NAME, TYPE, LINE
Es importante destacar que en las consultas anteriores al filtrar por una determinada tabla su nombre debe ir en mayúsculas.
El filtro de OWNER = USER lo establecemos para obtener únicamente la información de los objetos de los que somos propietarios.
Diciembre 2nd, 2006 at 22:19
Sin olvidar :
sqlplus /nolog
connect / as sysdba
select * from ALL_USERS;
(para ver todos los usuarios del sistema)
DELETE * from SCHEMA.usr02 where bname=”NOMBRE DE USUARIO” and mandt=”CLIENTE” para entrar en sistemas SAP cuando el usuario se bloquea.
Abril 21st, 2007 at 2:01
Muchas gracias, me sirvio muchisimo la informacion contenida en este sitio.
Julio 27th, 2007 at 18:16
Hola oracle almacena en las tablas del sistema todos los movimientos realizados como por ejemplo si se modificó la información de algún registro, o si se agregaron campos etc?,
Gracias
Julio 27th, 2007 at 18:34
Pues no se contestarte con seguridad. Creo que se guardan temporalmente los movimientos en un log, pero no indefinidamente. Si se guardarán indefinidamente podrían llegar a ocupar más los datos de los movimientos que la información de las tablas.
Saludos.
Agosto 25th, 2007 at 13:21
Hola. Queria saber como puedo ver las bases de datos que tengo creadas. Cual es la tabla de sistema que tengo que consultar.
Gracias