需要从没有主键的架构中获取表名列表。我尝试了以下查询来获取此信息,但它将列出除主键之外的所有其他键。
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';
答案 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'