sql >> データベース >  >> RDS >> Oracle

Oracleデータベースのテーブルの列のすべてのメタデータを表示するにはどうすればよいですか?

    これを行うには、クエリを実行できます(付与された権限によって異なります)[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
    
       )
    



    1. MySql-前の行の値と次の行の値を取得するにはどうすればよいですか?

    2. 同じJPAクラスに対する複数のデータベースのサポート

    3. Pythonを使用してWindows認証でMSSQLServerに接続しますか?

    4. Oracle SQL:IN句から存在しない値を取得する