常用SQL-查询没有主键没有索引的表

        在Oracle数据库中查询表是否拥有主键可通过视图USER_CONSTRAINTS并限定条件CONSTRAINT_TYPE='P'来查询。查询索引数据可通过视图USER_INDEXES来查询。查询表的数据可通过查询USER_TABLES来获取数据。如果要查询没有主键的表,没有索引的表则需要通过将这些表进行关联来获取。而当每次想要查询没有索引的数据时候,不想自己写,于是网络上搜索,但搜索到的数据都是一堆乱七八糟的。所以整合了这些SQL的查询,首发在微信公众号

    该SQL用于查询Oracle当前用户下主键和索引的情况。查询结果如下图所示

图片

TABLE_NAME:表示表名

KEY_NUMBER:表示主键数量,等于0表示没有主键

INDEX_NUMBER:表示索引数量,等于0表示没有索引

SQL文本如下:

WITH  INDEX_DATA AS (

SELECT TABLE_NAME,COUNT(*) NUMS FROM USER_INDEXES GROUP BY TABLE_NAME

),CONST_DATA AS(

SELECT T.TABLE_NAME,COUNT(*) NUMS FROM USER_CONSTRAINTS T WHERE T.CONSTRAINT_TYPE='P' GROUP BY T.TABLE_NAME

),QUERY_RESULT AS(

SELECT /*+ NO_MERGE(T) NO_MERGE(T1) NO_MERGE(T2)  USE_HASH(T T1) USE_HASH(T T2)*/

T.TABLE_NAME,

NVL(T1.NUMS,0)  INDEX_NUMBER,

NVL(T2.NUMS,0)  KEY_NUMBER

 FROM USER_TABLES T 

LEFT JOIN INDEX_DATA T1 ON T.TABLE_NAME = T1.TABLE_NAME

LEFT JOIN CONST_DATA T2 ON T.TABLE_NAME = T2.TABLE_NAME

)

SELECT * FROM QUERY_RESULT T WHERE KEY_NUMBER=0 AND INDEX_NUMBER =0

    如果你的数据库有多个用户,你想查询所有用户的数据,而不仅仅是当前用户,这时你可以通过将上面SQL中的USER_INDEXES视图替换为DBA_INDEXES视图,将USER_CONSTRAINTS视图替换为DBA_CONSTRAINTS视图,将USER_TABLES视图替换为DBA_TABLES视图即可查询所有用户的数据,但前提是你得拥有查询数据字典的权限。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值