2012-03-24 21 views

Respuesta

27

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.

+0

Gracias! Esto es definitivamente lo mejor que he visto esto explicado. – patricksweeney

1

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

13

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; 
+1

Esta respuesta es excelente porque también proporciona índices y claves para la tabla. – rlobban

+1

visualmente más atractivo sería esta ligera modificación: 'select regexp_replace (dbms_metadata.get_ddl ('TABLE', '

', '
'), '\ t | \ s {2}', CHR (13)) como ddl de dual' –

+1

@rlobban - Este comando no muestra índices – Kingsly

Cuestiones relacionadas