没有主键的表的列表

时间:2014-01-27 11:33:33

标签: oracle

需要从没有主键的架构中获取表名列表。我尝试了以下查询来获取此信息,但它将列出除主键之外的所有其他键。

SELECT a.constraint_name,a.table_name
FROM ALL_CONS_COLUMNS A
JOIN ALL_CONSTRAINTS C
ON A.CONSTRAINT_NAME = C.CONSTRAINT_NAME
WHERE
C.CONSTRAINT_TYPE not in('P')
and a.owner ='my_schema';

3 个答案:

答案 0 :(得分:2)

如果您只想为当前用户使用此功能,最好使用user_xxx次观看而不是all_xxx次观看。

以下应该做你想做的事:

select ut.table_name
from user_tables ut
where not exists (select 1
                  from user_constraints ac
                  where ac.table_name = ut.table_name
                    and ac.constraint_type = 'P'
                  );

如果您确实需要为其他用户使用此功能,则可以使用以下内容。

select at.*
from all_tables at
where not exists (select 1
                  from all_constraints ac
                  where ac.owner = at.owner
                    and ac.table_name = at.table_name
                    and ac.constraint_type = 'P'
                  )
and at.owner = 'MY_SCHEMA';

不要忘记Oracle区分大小写且用户名以大写形式存储,因此a.owner ='my_schema'很可能不会返回任何内容。

答案 1 :(得分:0)

试试这个,

SELECT table_name 
FROM   all_tables A 
WHERE  table_name NOT IN 
     (
     SELECT table_name 
     FROM   all_constraints WHERE constraint_type ='P' 
     )
AND   a.owner = 'my_schema';

答案 2 :(得分:0)

另一种方式:

select owner,table_name
from all_tables
where owner = 'my_schema' 
MINUS
select owner,table_name
from all_constraints
where owner = 'my_schema' 
and constraint_type = 'P'