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

たとえば、テーブルが主キーであるか一意キーであるかを確認するにはどうすればよいですか?

    USER_CONSTRAINTSの2つのビューを結合できます およびUSER_CONS_COLUMNS

    SELECT a.*,
      b.constraint_type
    FROM user_cons_columns A,
      user_constraints b
    WHERE A.owner        =b.owner
    AND A.constraint_name=b.constraint_name
    AND A.table_name     = b.table_name
    and a.table_name='CLASS'
    /
    

    たとえば、

    SQL> SELECT a.*,
      2    b.constraint_type
      3  FROM user_cons_columns A,
      4    user_constraints b
      5  WHERE A.owner        =b.owner
      6  AND A.constraint_name=b.constraint_name
      7  AND A.table_name     = b.table_name
      8  and a.table_name='EMP'
      9  /
    
    OWNER      CONSTRAINT_NAME      TABLE_NAME COLUMN_NAME            POSITION C
    ---------- -------------------- ---------- -------------------- ---------- -
    SCOTT      PK_EMP               EMP        EMPNO                         1 P
    SCOTT      FK_DEPTNO            EMP        DEPTNO                        1 R
    
    SQL>
    

    別の方法として、 DBMS_METADATA.GET_DDLを使用します テーブルのDDLを生成します。完全なテーブル情報が含まれます-

    SQL> set long 200000 pages 0 lines 131
    SQL> column txt format a121 word_wrapped
    SQL> select dbms_metadata.get_ddl('TABLE', 'EMP') from dual;
    
      CREATE TABLE "SCOTT"."EMP"
       (    "EMPNO" NUMBER(4,0),
            "ENAME" VARCHAR2(10),
            "JOB" VARCHAR2(9),
            "MGR" NUMBER(4,0),
            "HIREDATE" DATE,
            "SAL" NUMBER(7,2),
            "COMM" NUMBER(7,2),
            "DEPTNO" NUMBER(2,0),
             CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
      USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "USERS"  ENABLE,
             CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
              REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE
       ) SEGMENT CREATION IMMEDIATE
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
     NOCOMPRESS LOGGING
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "USERS"
    
    
    SQL>
    

    したがって、生成されたDDLに完全なテーブル情報があることがわかります。




    1. PLS-00428:このSELECTステートメントでINTO句が必要です

    2. 行が変更された場合にのみ、更新後にMySQLトリガー

    3. 高度なSQL:パラメーター化されたテーブル値関数の出力をSQLテーブルに挿入します

    4. 2つの動作するSQLクエリを結合すると間違った結果が得られます-どこが間違っているのですか