oracle 没有主键表的列表

vlju58qv  于 2022-11-28  发布在  Oracle
关注(0)|答案(4)|浏览(324)

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

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';
iswrvxsc

iswrvxsc1#

如果您只想让当前用户使用此视图,最好使用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'很可能不会返回任何内容。

iovurdzv

iovurdzv2#

另一个道:

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'
cpjpxq1n

cpjpxq1n3#

像这样试试,

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';
dgsult0t

dgsult0t4#

选择表。owner|| "的。"|| tables. table_name作为table_owner从所有表中,(选择所有者、TABLE_NAME、约束类型CONSTRAINT_NAME FROM ALL_CONSTRAINTS WHERE CONSTRAINT_TYPE ='P '/具有PK的所有表的列表/)constr Where表.所有者= constr.所有者(+)与表.表名=约束.表名(+)与表.所有者〈〉'SYS'与表.所有者〈〉'SYSTEM'与约束.所有者为空与约束.表名为空ORDER BY 1

相关问题