oracle怎么查询所有的表有没有主键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle怎么查询所有的表有没有主键相关的知识,希望对你有一定的参考价值。
1、查找表的所有索引(包括索引名,类型,构成列):select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表
2、查找表的主键(包括名称,构成列):
select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.table_name = 要查询的表
3、查找表的唯一性约束(包括名称,构成列):
select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table_name = 要查询的表
4、查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询):
select * from user_constraints c where c.constraint_type = 'R' and c.table_name = 要查询的表
查询外键约束的列名:
select * from user_cons_columns cl where cl.constraint_name = 外键名称
查询引用表的键的列名:
select * from user_cons_columns cl where cl.constraint_name = 外键引用表的键名
5、查询表的所有列及其属性
select t.*,c.COMMENTS from user_tab_columns t,user_col_comments c where t.table_name = c.table_name and t.column_name = c.column_name and t.table_name = 要查询的表
6、Oracle中每个用户表的表名和行数
select table_name,num_rows from user_tables;
7、Oracle查询用户表空间:select * from user_all_tables
8、Oracle查询所有函数和储存过程:select * from user_source
9、Oracle查询所有用户:
select * from all_users;
select * from dba_users
10、Oracle查看当前用户连接:select * from v$Session
11、Oracle查看当前用户权限:select * from session_privs
12、Oracle查看用户表空间使用情况:
select a.file_id "FileNo",a.tablespace_name
"Tablespace_name",
a.bytes "Bytes",a.bytes-sum(nvl(b.bytes,0)) "Used",
sum(nvl(b.bytes,0)) "Free",
sum(nvl(b.bytes,0))/a.bytes*100 "%free"
from dba_data_files a, dba_free_space b
where a.file_id=b.file_id(+)
group by a.tablespace_name ,
a.file_id,a.bytes order by a.tablespace_name; 参考技术A SELECT * FROM user_tables A WHERE NOT EXISTS (SELECT * FROM user_constraints b WHERE A.table_name = b.table_name AND b.constraint_type = 'P');
有没有办法列出 ORACLE 查询中使用的表和列? [复制]
【中文标题】有没有办法列出 ORACLE 查询中使用的表和列? [复制]【英文标题】:Is there a way to list tables and columns used in a ORACLE query? [duplicate] 【发布时间】:2018-08-26 15:51:54 【问题描述】:我有一个庞大的 Oracle 查询(约 20k 行),我需要列出该查询中使用的所有表和列。我用谷歌搜索并发现了一些 SQL-Parser 工具和插件,但它们对我没有用。
在 perl 库下找到,但它不处理 TO_DATE 和 TO_CHAR 列。它正在抛出错误。
http://search.cpan.org/~rehsack/SQL-Statement-1.412/lib/SQL/Parser.pm
有没有其他方法可以列出查询中使用的所有表和列?
【问题讨论】:
你也许可以从查询的解释计划中得到一些细节。 要从查询中获取引用表的列表,请参阅here。您是指返回的列(容易从光标元数据中获取)还是真正使用 列(在执行计划中检查Column Projection Information
)。
TO_DATE
和 TO_CHAR
不是列:它们是函数。
嗨 Marmite Bomber,您能告诉我有关列投影信息的信息以及如何获取吗?
【参考方案1】:
不确定这是否是答案,但您可以使用查询创建 VIEW。
CREATE VIEW your_view_name
AS SELECT * FROM your_table_or_complex_query;
然后使用 SYS.USER_DEPENDENCIES 表列出这些表。
select *
from SYS.USER_DEPENDENCIES
where type = 'VIEW'
AND REFERENCED_TYPE IN ('VIEW', 'TABLE', 'SYNONYM')
AND name = '<view_name>';
要列出列,您可以使用下面的查询,(此查询的问题是如果列例如 COLUMN1 存在于三个表 TAB1、TAB2、TAB3 但在您的查询中它仅来自 TAB1,这三个表会显示)
SELECT a.referenced_name, b.column_name
FROM SYS.USER_DEPENDENCIES A, USER_TAB_COLS B,
(SELECT dbms_metadata.get_ddl('VIEW','<view_name>','<schema_name>') ddl_text FROM DUAL) c
WHERE TYPE = 'VIEW'
AND REFERENCED_TYPE IN ('VIEW', 'TABLE', 'SYNONYM')
AND name = '<view_name>'
AND b.table_name = a.name
AND INSTR(lower(c.ddl_text), lower(b.column_name)) > 0
ORDER BY referenced_name;
【讨论】:
您好,谢谢!使用这种方法,我可以检索使用的表名,但是这些表中的列呢? 哈哈,我不知道如何获取列。但我在回答中添加了一个查询,也许它可以帮助你。以上是关于oracle怎么查询所有的表有没有主键的主要内容,如果未能解决你的问题,请参考以下文章