ver una tablas tabla describe desc db_link create buscar 12c oracle oracle11g sql-scripts data-dictionary

tablas - ¿Cómo puedo describir una tabla en Oracle sin usar el comando DESCRIBE?



order by desc oracle (4)

Oracle tiene una tabla de conjunto que contiene 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. Busque "ALL_TABLES" aquí y consulte toda la otra información disponible documentation

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.


Recién introducido en Oracle SQLcl es el comando de information o simplemente INFO table_name . Tiene una sintaxis simple como DESC[RIBE] :

SQL> info INFORMATION -------- This command is like describe but with more details about the objects requested. INFO[RMATION] {[schema.]object[@connect_identifier]} INFO+ will show column statistics

Su salida es muy superior y descriptiva en comparación con DESCRIBE . Enumera información más detallada sobre las definiciones de columna para una tabla, vista o sinónimo, o las especificaciones para una función o procedimiento.

Por ejemplo : este es el resultado que obtengo en SQLcl: versión 18.1.1 cuando ejecuto

info employees

SQL> info employees; TABLE: EMPLOYEES LAST ANALYZED:2018-05-26 15:07:58.0 ROWS :107 SAMPLE SIZE :107 INMEMORY :DISABLED COMMENTS :employees table. Contains 107 rows. References with departments, jobs, job_history tables. Contains a self reference. Columns NAME DATA TYPE NULL DEFAULT COMMENTS *EMPLOYEE_ID NUMBER(6,0) No Primary key of employees table. FIRST_NAME VARCHAR2(20 BYTE) Yes First name of the employee. A not null column. LAST_NAME VARCHAR2(25 BYTE) No Last name of the employee. A not null column. EMAIL VARCHAR2(25 BYTE) No Email id of the employee PHONE_NUMBER VARCHAR2(20 BYTE) Yes Phone number of the employee; includes country code and area code HIRE_DATE DATE No Date when the employee started on this job. A not null column. JOB_ID VARCHAR2(10 BYTE) No Current job of the employee; foreign key to job_id column of the jobs table. A not null column. SALARY NUMBER(8,2) Yes Monthly salary of the employee. Must be greater than zero (enforced by constraint emp_salary_min) COMMISSION_PCT NUMBER(2,2) Yes Commission percentage of the employee; Only employees in sales department elgible for commission percentage MANAGER_ID NUMBER(6,0) Yes Manager id of the employee; has same domain as manager_id in departments table. Foreign key to employee_id column of employees table.(useful for reflexive joins and CONNECT BY query) DEPARTMENT_ID NUMBER(4,0) Yes Department id where employee works; foreign key to department_id column of the departments table Indexes INDEX_NAME UNIQUENESS STATUS FUNCIDX_STATUS COLUMNS HR.EMP_JOB_IX NONUNIQUE VALID JOB_ID HR.EMP_NAME_IX NONUNIQUE VALID LAST_NAME, FIRST_NAME HR.EMP_EMAIL_UK UNIQUE VALID EMAIL HR.EMP_EMP_ID_PK UNIQUE VALID EMPLOYEE_ID HR.EMP_MANAGER_IX NONUNIQUE VALID MANAGER_ID HR.EMP_DEPARTMENT_IX NONUNIQUE VALID DEPARTMENT_ID References TABLE_NAME CONSTRAINT_NAME DELETE_RULE STATUS DEFERRABLE VALIDATED GENERATED DEPARTMENTS DEPT_MGR_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME EMPLOYEES EMP_MANAGER_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME JOB_HISTORY JHIST_EMP_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME

Aquí hay una captura de pantalla con info+ :


También puede recuperar el comando completo que se puede usar para recrear la tabla:

select dbms_metadata.get_ddl(''TABLE'',''<my table name>'',''<table owner>'') from dual;


Está buscando USER_TAB_COLUMNS - todas las columnas, y sus descripciones en el esquema en el que se ejecuta la consulta - o ALL_TAB_COLUMNS - el mismo excepto para todas las 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 mayúsculas y minúsculas (una mala idea), en cuyo caso deberá usar algo como = "MyTable" .

Específicamente desc es equivalente al siguiente que robé de 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'';

Puede encontrar todo este tipo de vista select * from dictionary , que es el nivel superior del diccionario de datos o mirando la documentation .

También está 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 de SELECT ANY DICTIONARY .