Je veux connaître la requête qui nous permet de visualiser toutes les colonnes définies pour une table dans la base de données Oracle.
Élaboration:
Nom de la table: Some_Table a 10 colonnes.
Je veux savoir comment récupérer tous les noms de colonnes, leur type de données et toutes les contraintes définies pour n'importe quelle colonne.
Je veux savoir comment récupérer tous les noms de colonnes, leur type de données et toutes les contraintes définies pour n'importe quelle colonne.
Pour ce faire, vous pouvez interroger (selon les privilèges qui vous sont accordés) [user|all|dba]_tab_columns
, [user|all|dba]_cons_columns
, [user|all|dba]_constraints
vues.
Voici un petit exemple:
select decode( t.table_name
, lag(t.table_name, 1) over(order by t.table_name)
, null
, t.table_name ) as table_name -- <- just to eliminate
, t.column_name -- repeated tab_name
, t.data_type
, cc.constraint_name
, uc.constraint_type
from user_tab_columns t
left join user_cons_columns cc
on (cc.table_name = t.table_name and
cc.column_name = t.column_name)
left join user_constraints uc
on (t.table_name = uc.table_name and
uc.constraint_name = cc.constraint_name )
where t.table_name in ('EMPLOYEES', 'DEPARTMENTS');
Résultat:
TABLE_NAME COLUMN_NAME DATA_TYPE CONSTRAINT_NAME CONSTRAINT_TYPE
------------- ----------------- -------------- -------------------------------
DEPARTMENTS LOCATION_ID NUMBER DEPT_LOC_FK R
DEPARTMENT_ID NUMBER DEPT_ID_PK P
DEPARTMENT_NAME VARCHAR2 DEPT_NAME_NN C
MANAGER_ID NUMBER DEPT_MGR_FK R
EMPLOYEES SALARY NUMBER EMP_SALARY_MIN C
PHONE_NUMBER VARCHAR2
EMPLOYEE_ID NUMBER EMP_EMP_ID_PK P
DEPARTMENT_ID NUMBER EMP_DEPT_FK R
JOB_ID VARCHAR2 EMP_JOB_FK R
MANAGER_ID NUMBER EMP_MANAGER_FK R
COMMISSION_PCT NUMBER
FIRST_NAME VARCHAR2
JOB_ID VARCHAR2 EMP_JOB_NN C
HIRE_DATE DATE EMP_HIRE_DATE_NN C
EMAIL VARCHAR2 EMP_EMAIL_NN C
LAST_NAME VARCHAR2 EMP_LAST_NAME_NN C
EMAIL VARCHAR2 EMP_EMAIL_UK U
17 rows selected
De plus, pour récupérer une spécification complète (si nécessaire) d'une table, vous pouvez utiliser dbms_metadata
package et get_ddl
fonction de ce package:
select dbms_metadata.get_ddl('TABLE', 'EMPLOYEES') as table_ddl
from dual;
table_ddl
--------------------------------------------------------------------------------
CREATE TABLE "HR"."EMPLOYEES"
("EMPLOYEE_ID" NUMBER(6,0),
"FIRST_NAME" VARCHAR2(20),
"LAST_NAME" VARCHAR2(25) CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE,
"EMAIL" VARCHAR2(25) CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE,
"PHONE_NUMBER" VARCHAR2(20),
"HIRE_DATE" DATE CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE,
"JOB_ID" VARCHAR2(10) CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE,
"SALARY" NUMBER(8,2),
"COMMISSION_PCT" NUMBER(2,2),
"MANAGER_ID" NUMBER(6,0),
"DEPARTMENT_ID" NUMBER(4,0),
CONSTRAINT "EMP_SALARY_MIN" CHECK (salary > 0) ENABLE,
CONSTRAINT "EMP_EMAIL_UK" UNIQUE ("EMAIL")
-- ... other attributes
)