2012-11-19 28 views
9

मैं क्वेरी जानना चाहता हूं जो हमें ऑरैक डेटाबेस में किसी तालिका के लिए परिभाषित सभी कॉलम देखने की अनुमति देता है।ऑरैक डेटाबेस में किसी तालिका के कॉलम के सभी मेटाडेटा को कैसे देखें?

विस्तार:

तालिका का नाम: Some_Table 10 कॉलम है।

मैं जानना चाहता हूं कि मैं सभी कॉलम नाम, उनके डेटा प्रकार और किसी भी कॉलम के लिए परिभाषित किसी भी बाधाओं को कैसे प्राप्त कर सकता हूं।

उत्तर

19

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 

    ) 
+0

हाय निकोलस Krasnov, मैंने आपके प्रश्नों की कोशिश की लेकिन मुझे त्रुटि मिल रही है आपके दोनों तरीकों के लिए ओम ऑरैकल। जब मैं get_ddl चला रहा हूँ मैं त्रुटि हो रही है: ORA-31,603: वस्तु "XATable_1" प्रकार टेबल की स्कीमा "XATRANS" ORA-06512 में नहीं मिला: "SYS.DBMS_METADATA" पर, लाइन 5088 ORA-06512: "SYS.DBMS_METADATA" पर, लाइन 7589 ORA-06512: क्वेरी चलाने लाइन 1 –

+0

पर और जब मैं लाइन पर इस मिल रहा है कोई 13 ORA-00904: "यू सी" "CONSTRAINTS_NAME":। अमान्य पहचानकर्ता –

+0

'ब्रेक table_name' पर SQL * प्लस वातावरण में बेहतर प्रदर्शन करेगा;) –