Estoy teniendo un momento difícil con una clase que estoy tomando. Necesitamos escribir un script de Oracle que actuará como el comando DESCRIBE. El libro que estamos utilizando describe cómo trabajar con el diccionario de datos muy mal. No buscando respuestas, sino un punto en la dirección correcta.¿Cómo puedo describir una tabla en Oracle sin usar el comando DESCRIBE?
Respuesta
Usted está buscando USER_TAB_COLUMNS
- todas las columnas, y sus descripciones en el esquema se ejecuta la consulta en - o ALL_TAB_COLUMNS
- el mismo, excepto para todos tablas que el usuario tiene permiso para ver.
Una consulta típica podría ser:
select *
from user_tab_columns
where table_name = 'MY_TABLE'
order by column_id
column_id
es el "orden" de la columna en la tabla.
Debe asegurarse de que 'MY_TABLE' esté en mayúscula a menos que haya agregado tablas con envoltura (una mala idea) en cuyo caso necesita usar algo como = "MyTable"
.
Específicamente desc
es equivalente a lo siguiente, que le robé a ss64, un buen recurso de Oracle:
select column_name as "Name"
, nullable as "Null?"
, concat(concat(concat(data_type,'('),data_length),')') as "Type"
from user_tab_columns
where table_name = 'MY_TABLE';
Usted puede encontrar todos este tipo de vista por select * from dictionary
, que es el nivel superior de la data dictionary o mirando el documentation.
También está el DBA_TAB_COLUMNS
, que es lo mismo que ALL_TAB_COLUMNS
, pero para cada tabla en la base de datos. Esto supone que tiene los privilegios para ver tanto él como las tablas. Si no tiene acceso a esta tabla, necesita que su DBA le otorgue el privilegio SELECT ANY DICTIONARY
.
Oracle tiene un conjunto de tablas que contienen metadatos sobre la estructura de la base de datos. Hay una tabla de tablas. Una tabla de vistas. Una tabla de columnas. Puede consultar estas tablas utilizando vistas como USER_TABLES (tablas en su esquema), ALL_TABLES (tablas que tiene permiso para ver), DBA_TABLES (todas las tablas, si tiene los privilegios). Más genéricamente, muchos proveedores de bases de datos admiten el "esquema de información" que proporciona una vista coherente de los metadatos entre los proveedores. Búsqueda de "ALL_TABLES" aquí y ver toda la otra información disponible http://docs.oracle.com/cd/B28359_01/server.111/b28320/toc.htm
También puede recuperar el comando completo que se puede utilizar para volver a crear la tabla:
select dbms_metadata.get_ddl('TABLE','<my table name>','<table owner>') from dual;
Esta respuesta es excelente porque también proporciona índices y claves para la tabla. – rlobban
visualmente más atractivo sería esta ligera modificación: 'select regexp_replace (dbms_metadata.get_ddl ('TABLE', '
Gracias! Esto es definitivamente lo mejor que he visto esto explicado. – patricksweeney