I want to know how I can retrieve the all column names, their data type, and any constraints that are defined for any column.
[user|all|dba]_tab_columns
, [user|all|dba]_cons_columns
, [user|all|dba]_constraints
दृश्य (आप के लिए प्रदान किए गए विशेषाधिकारों के आधार पर) है कि आप क्वेरी कर सकता है ऐसा करने के लिए।
यहां एक त्वरित उदाहरण है:
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');
परिणाम:
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
इसके अलावा एक पूर्ण विनिर्देश को पुनः प्राप्त करने के लिए एक तालिका के (यदि आवश्यक), आप dbms_metadata
पैकेज और उस के get_ddl
समारोह का उपयोग कर सकते पैकेज:
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
)
हाय निकोलस Krasnov, मैंने आपके प्रश्नों की कोशिश की लेकिन मुझे त्रुटि मिल रही है आपके दोनों तरीकों के लिए ओम ऑरैकल। जब मैं get_ddl चला रहा हूँ मैं त्रुटि हो रही है: ORA-31,603: वस्तु "XATable_1" प्रकार टेबल की स्कीमा "XATRANS" ORA-06512 में नहीं मिला: "SYS.DBMS_METADATA" पर, लाइन 5088 ORA-06512: "SYS.DBMS_METADATA" पर, लाइन 7589 ORA-06512: क्वेरी चलाने लाइन 1 –
पर और जब मैं लाइन पर इस मिल रहा है कोई 13 ORA-00904: "यू सी" "CONSTRAINTS_NAME":। अमान्य पहचानकर्ता –
'ब्रेक table_name' पर SQL * प्लस वातावरण में बेहतर प्रदर्शन करेगा;) –