Consultas SQL de Oracle Database necesarias para obtener los campos ó columnas, tipos de datos, tamaño, las restricciones (constraint), los índices (indexes) y las reglas de integridad referencial de una tabla mediante las vistas: all_tab_columns, all_cons_columns y all_indexes.
- Preparando el escenario de trabajo en Oracle Database.
- Obteniendo los datos de una tabla de Oracle Database.
Preparando el escenario de trabajo en Oracle Database
Para realizar las pruebas y obtener los datos necesitaremos un servidor con Oracle Database instalado, también necesitaremos un software para acceso a Oracle que nos permita ejecutar consultas SQL. Se puede utilizar SQL*Plus que incluye el propio Oracle (ejecutar consultas SQL en modo comando), utilizar la utilidad de ejecución de consultas SQL vía web (a partir de la versión 10g) o se puede utilizar cualquier otro software, como:
En primer lugar, para probar los resultados, crearemos un par de tablas ejecutando las consultas SQL de inserción siguientes:
1 2 3 4 5 6 7 8 |
create table PRUEBA ( id number primary key, texto varchar2(2000)); create table PRUEBA2 ( id number primary key, texto varchar2(2000), numero number(9,2) check(numero > 10)); |
Colocando «primary key» en un campo hacemos que sea clave primaria de la tabla y, por tanto, Oracle creará un índice para ese campo automáticamente. Nos servirá para probar los resultados.
Insertamos algún registro en las tablas de prueba:
1 2 3 4 |
insert into prueba values (1, 'Fernando Alonso'); insert into prueba values (2, 'David Junior'); insert into prueba2 values (1, 'Fernando Alonso', 11); insert into prueba2 values (2, 'David Junior', 12); |
Hemos de aclarar que para ejecutar algunas de estas consultas SQL y las que a continuación describiremos es necesario iniciar sesión en Oracle Database con un usuario con permisos de administrador. Normalmente deberá iniciar la sesión como usuario «system» o algún otro que tenga privilegios suficientes.
Obteniendo los datos de una tabla de Oracle Database
Obtener las columnas o campos de una tabla (nombre, tipo de datos, tamaño, permite nulos)
La siguiente consulta SQL mostrará las columnas de la tabla «PRUEBA» (nombre del campo, tipo de datos, tamaño, si permite nulos):
1 2 3 4 |
select column_name "Campo", data_type "Tipo de datos", data_length "Tamaño", nullable "Permite nulos" from all_tab_columns where table_name = 'PRUEBA' |
El resultado de la consulta anterior:
Campo | Tipo de datos | Tamaño | Permite nulos |
ID | NUMBER 22 | 22 | N |
TEXTO | VARCHAR2 | 2000 | Y |
Obtener las restricciones de una tabla Oracle Database
La siguiente consulta SQL mostrará todas las restricciones de la tabla «PRUEBA2» (nombre de la restricción, nombre de la tabla, columnas a las que afecta):
1 2 3 4 |
select constraint_name "Nombre", table_name "Tabla", column_name "Columnas" from all_cons_columns where table_name = 'PRUEBA2' |
El resultado de la ejecución de la consulta SQL anterior:
Nombre | Tabla | Columnas |
SYS_C0083714 | PRUEBA2 | NUMERO |
SYS_C0083715 | PRUEBA2 | ID |
Obtener los índices de una tabla Oracle Database
Esta consulta SQL mostrará todos los índices de la tabla «PRUEBA» (nombre del índice, tipo de índice, nombre de la tabla, tablespace en el que se guarda, si es secundario):
1 2 3 4 5 |
select index_name "Nombre", index_type "Tipo", table_name "Tabla", tablespace_name "Tablespace", secondary "Secundario" from all_indexes where table_name = 'PRUEBA' |
El resultado de la ejecución de la consulta SQL anterior:
Nombre | Tipo | Tabla | Tablespace | Secundario |
SYS_C0083713 | NORMAL | PRUEBA | USERS | N |
Otra forma de mostrar los índices de una tabla Oracle Database, ésta muestra más datos que la anterior: posición, tipo de orden, etc.:
1 2 3 4 5 6 7 8 |
select ai.index_name Nombre, ai.index_type Tipo, ai.uniqueness Unico, substr(ic.column_name, 1, 30) Columna, ic.column_position Posicion, ai.compression Compresion, ai.status Estado, ai.secondary Secundario, ai.generated Generado, ic.descend Orden, ai.table_owner Propietario_Tabla, ic.index_owner Propietario_Indice, ic.table_name Nombre_Tabla, ai.tablespace_name Tablespace from all_ind_columns ic, all_indexes ai where ai.index_name = ic.index_name and ai.table_name = 'PRUEBA' |
El resultado de la ejecución de la consulta SQL anterior:
Nombre | Tipo | UNICO | COLUMNA | POSICION | COMPRESION | ESTADO |
SYS_C0083713 | NORMAL | UNIQUE | ID | 1 | DISABLED | VALID |
SECUNDARIO | GENERADO | ORDEN | PROPIETARIO_TABLA |
N | Y | ASC | ALONSO |
PROPIETARIO_INDICE | NOMBRE_TABLA | TABLESPACE |
ALONSO | PRUEBA | USERS |