各位用户为了找寻关于Oracle中检查外键是否有索引的SQL脚本分享的资料费劲了很多周折。这里教程网为您整理了关于Oracle中检查外键是否有索引的SQL脚本分享的相关资料,仅供查阅,以下为您介绍关于Oracle中检查外键是否有索引的SQL脚本分享的详细内容

代码如下:

COLUMN COLUMNS format a30 word_wrapped  COLUMN tablename format a15 word_wrapped  COLUMN constraint_name format a15 word_wrapped  SELECT TABLE_NAME,         CONSTRAINT_NAME,         CNAME1 || NVL2(CNAME2, ',' || CNAME2, NULL) ||         NVL2(CNAME3, ',' || CNAME3, NULL) ||         NVL2(CNAME4, ',' || CNAME4, NULL) ||         NVL2(CNAME5, ',' || CNAME5, NULL) ||         NVL2(CNAME6, ',' || CNAME6, NULL) ||         NVL2(CNAME7, ',' || CNAME7, NULL) ||         NVL2(CNAME8, ',' || CNAME8, NULL) COLUMNS    FROM (SELECT B.TABLE_NAME,                 B.CONSTRAINT_NAME,                 MAX(DECODE(POSITION, 1, COLUMN_NAME, NULL)) CNAME1,                 MAX(DECODE(POSITION, 2, COLUMN_NAME, NULL)) CNAME2,                 MAX(DECODE(POSITION, 3, COLUMN_NAME, NULL)) CNAME3,                 MAX(DECODE(POSITION, 4, COLUMN_NAME, NULL)) CNAME4,                 MAX(DECODE(POSITION, 5, COLUMN_NAME, NULL)) CNAME5,                 MAX(DECODE(POSITION, 6, COLUMN_NAME, NULL)) CNAME6,                 MAX(DECODE(POSITION, 7, COLUMN_NAME, NULL)) CNAME7,                 MAX(DECODE(POSITION, 8, COLUMN_NAME, NULL)) CNAME8,                 COUNT(*) COL_CNT            FROM (SELECT SUBSTR(TABLE_NAME, 1, 30) TABLE_NAME,                         SUBSTR(CONSTRAINT_NAME, 1, 30) CONSTRAINT_NAME,                         SUBSTR(COLUMN_NAME, 1, 30) COLUMN_NAME,                         POSITION                    FROM USER_CONS_COLUMNS) A,                 USER_CONSTRAINTS B           WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME             AND B.CONSTRAINT_TYPE = 'R'           GROUP BY B.TABLE_NAME, B.CONSTRAINT_NAME) CONS   WHERE COL_CNT > ALL   (SELECT COUNT(*)            FROM USER_IND_COLUMNS I           WHERE I.TABLE_NAME = CONS.TABLE_NAME             AND I.COLUMN_NAME IN (CNAME1, CNAME2, CNAME3, CNAME4, CNAME5,                  CNAME6, CNAME7, CNAME8)             AND I.COLUMN_POSITION <= CONS.COL_CNT           GROUP BY I.INDEX_NAME)  /

在上面的基础上修改了一下,可以检查所有的用户。

代码如下:

SET linesize 400; COLUMN OWNER format a10 word_wrapped  COLUMN COLUMNS format a30 word_wrapped  COLUMN TABLE_NAME format a15 word_wrapped  COLUMN CONSTRAINT_NAME format a40 word_wrapped  SELECT OWNER,      TABLE_NAME,         CONSTRAINT_NAME,         CNAME1 || NVL2(CNAME2, ',' || CNAME2, NULL) ||         NVL2(CNAME3, ',' || CNAME3, NULL) ||         NVL2(CNAME4, ',' || CNAME4, NULL) ||         NVL2(CNAME5, ',' || CNAME5, NULL) ||         NVL2(CNAME6, ',' || CNAME6, NULL) ||         NVL2(CNAME7, ',' || CNAME7, NULL) ||         NVL2(CNAME8, ',' || CNAME8, NULL) COLUMNS    FROM (SELECT B.OWNER,B.TABLE_NAME,                 B.CONSTRAINT_NAME,                 MAX(DECODE(POSITION, 1, COLUMN_NAME, NULL)) CNAME1,                 MAX(DECODE(POSITION, 2, COLUMN_NAME, NULL)) CNAME2,                 MAX(DECODE(POSITION, 3, COLUMN_NAME, NULL)) CNAME3,                 MAX(DECODE(POSITION, 4, COLUMN_NAME, NULL)) CNAME4,                 MAX(DECODE(POSITION, 5, COLUMN_NAME, NULL)) CNAME5,                 MAX(DECODE(POSITION, 6, COLUMN_NAME, NULL)) CNAME6,                 MAX(DECODE(POSITION, 7, COLUMN_NAME, NULL)) CNAME7,                 MAX(DECODE(POSITION, 8, COLUMN_NAME, NULL)) CNAME8,                 COUNT(*) COL_CNT            FROM (SELECT SUBSTR(TABLE_NAME, 1, 30) TABLE_NAME,                         SUBSTR(CONSTRAINT_NAME, 1, 30) CONSTRAINT_NAME,                         SUBSTR(COLUMN_NAME, 1, 30) COLUMN_NAME,                         POSITION                    FROM DBA_CONS_COLUMNS WHERE OWNER NOT IN ('SYS','SYSTEM','SYSMAN','HR','OE','EXFSYS','DBSNMP','MDSYS','OLAPSYS','SCOTT','EXFSYS','SH','PM','CTXSYS')) A,                 DBA_CONSTRAINTS B           WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME             AND B.CONSTRAINT_TYPE = 'R'           GROUP BY B.OWNER,B.TABLE_NAME, B.CONSTRAINT_NAME) CONS   WHERE COL_CNT > ALL   (SELECT COUNT(*)            FROM DBA_IND_COLUMNS I           WHERE I.TABLE_NAME = CONS.TABLE_NAME AND I.TABLE_OWNER=CONS.OWNER            AND I.COLUMN_NAME IN (CNAME1, CNAME2, CNAME3, CNAME4, CNAME5,                  CNAME6, CNAME7, CNAME8)             AND I.COLUMN_POSITION <= CONS.COL_CNT           GROUP BY I.INDEX_NAME)  /