Comment décrire une table dans Oracle sans utiliser la commande DESCRIBE?
j'ai du mal avec un cours que je prends. Nous devons écrire un script Oracle qui agira comme la commande DESCRIBE. Le livre que nous utilisons décrit très mal comment travailler avec le dictionnaire de données. Ne cherche pas de réponses, mais d'un point dans la bonne direction.
4 réponses
Vous êtes à la recherche pour USER_TAB_COLUMNS
- toutes les colonnes, et leurs descriptions dans le schéma de la requête est exécutée dans - ou ALL_TAB_COLUMNS
- les mêmes sauf pour toutes les tables que l'Utilisateur a la permission de voir.
Une requête typique pourrait être:
select *
from user_tab_columns
where table_name = 'MY_TABLE'
order by column_id
column_id
est l '"ordre" de la colonne du tableau.
vous devez vous assurer que 'MY_TABLE' est capitalisé sauf si vous avez ajouté des tables avec boîtier (une mauvaise idée ) dans lequel cas, vous devez utiliser quelque chose comme = "MyTable"
.
spécifiquement desc
est l'équivalent de ce que j'ai volé à ss64, une bonne Oracle de la ressource:
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';
Vous pouvez trouver tous ce genre de vue par select * from dictionary
, qui est le niveau supérieur de l' dictionnaire de données ou en regardant le documentation.
Il y a aussi le DBA_TAB_COLUMNS
, qui est le même que ALL_TAB_COLUMNS
, mais pour chaque table de la base de données. Cela suppose que vous avez les privilèges pour voir à la fois lui et les tables. Si vous n'avez pas accès à cette table, vous devez obtenir votre DBA pour vous accorder le SELECT ANY DICTIONARY
privilège.
Vous pouvez également récupérer la commande entière qui peut être utilisée pour recréer la table:
select dbms_metadata.get_ddl('TABLE','<my table name>','<table owner>') from dual;
Oracle dispose d'un ensemble de tables contenant des métadonnées sur la structure de la base de données. Il est un tableau de tableaux. Un tableau de points de vue. Un tableau de colonnes. Vous pouvez interroger ces tables en utilisant des vues telles que USER_TABLES (tables dans votre schéma), ALL_TABLES (tables que vous avez la permission de visualiser), DBA_TABLES (toutes les tables, si vous avez les privilèges). Plus généralement, de nombreux fournisseurs de bases de données prennent en charge le "schéma d'information" qui fournit une vue cohérente des métadonnées parmi les fournisseurs. Recherche pour "ALL_TABLES" ici et regardez toutes les autres informations disponibles http://docs.oracle.com/cd/B28359_01/server.111/b28320/toc.htm
Nouvellement introduit dans Oracle SQLcl est le information
commande ou tout simplement INFO table_name
.
Il a une syntaxe simple comme 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
sa sortie est de loin supérieure et descriptive par rapport à DESCRIBE
. Il contient des informations plus détaillées sur les définitions de colonnes d'un tableau, d'une vue ou d'un synonyme, ou sur les spécifications d'une fonction ou d'une procédure.
Par exemple: C'est le résultat que j'obtiens SQLcl: Release 18.1.1 quand je lance
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
Voici une capture d'écran avec info+
: