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';
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';
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'
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';
选择表。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
4条答案
按热度按时间iswrvxsc1#
如果您只想让当前用户使用此视图,最好使用
user_xxx
视图而不是all_xxx
视图。下面的代码可以满足您的需求:
如果您确实需要为其他用户使用此功能,则可以使用以下代码。
不要忘记Oracle是区分大小写的,用户名以大写形式存储,因此
a.owner ='my_schema'
很可能不会返回任何内容。iovurdzv2#
另一个道:
cpjpxq1n3#
像这样试试,
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