Oracle不同权限获取表,视图,字段的sql整理方式

 更新时间:2026年03月27日 09:48:44   作者:未来@音律  
这篇文章主要介绍了Oracle不同权限获取表,视图,字段的sql整理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1. Oracle获取表sql

1.1 有DBA权限获取方式

select distinct TABLE_NAME from dba_tables 
where OWNER ='库名' 
and  owner NOT IN ('SYS','SYSTEM','OUTLN','XDB','WMSYS','CTXSYS','MDSYS')

1.2 普通权限获取方式

select distinct TABLE_NAME from all_tables 
where OWNER ='库名' 
and  owner NOT IN ('SYS','SYSTEM','OUTLN','XDB','WMSYS','CTXSYS','MDSYS')

2. Oracle获取表字段sql

2.1 有DBA权限获取方式

SELECT UPPER(T.TABLE_NAME),NVL(cc.comments, ''),C.COLUMN_NAME,CC.COMMENTS,C.DATA_TYPE,C.DATA_LENGTH,C.DATA_PRECISION,C.DATA_SCALE
 ,NULLABLE,CASE WHEN PK.CONSTRAINT_TYPE = 'P' THEN 'y'  ELSE 'n'  END
 FROM DBA_tables T JOIN DBA_TAB_COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME AND T.OWNER = C.OWNER
 LEFT JOIN DBA_COL_COMMENTS CC ON C.OWNER = CC.OWNER AND C.TABLE_NAME = CC.TABLE_NAME AND C.COLUMN_NAME = CC.COLUMN_NAME
 LEFT JOIN 
    (SELECT CONS.TABLE_NAME, CONS.OWNER, COLS.COLUMN_NAME, CONS.CONSTRAINT_TYPE
     FROM DBA_CONSTRAINTS CONS 
     JOIN DBA_CONS_COLUMNS COLS ON CONS.CONSTRAINT_NAME = COLS.CONSTRAINT_NAME 
     WHERE CONS.CONSTRAINT_TYPE = 'P'
    ) PK ON C.OWNER = PK.OWNER AND C.TABLE_NAME = PK.TABLE_NAME AND C.COLUMN_NAME = PK.COLUMN_NAME
    where UPPER(T.TABLE_NAME) in ( 逗号分隔的表名 ) and t.OWNER NOT IN ('SYS', 'SYSTEM', 'OUTLN', 'XDB', 'WMSYS', 'CTXSYS', 'MDSYS')
 ORDER BY T.TABLE_NAME, C.COLUMN_ID

2.2 普通权限获取方式

SELECT UPPER(T.TABLE_NAME),NVL(cc.comments, ''),C.COLUMN_NAME,CC.COMMENTS,C.DATA_TYPE,C.DATA_LENGTH,C.DATA_PRECISION,C.DATA_SCALE
 ,NULLABLE,CASE WHEN PK.CONSTRAINT_TYPE = 'P' THEN 'y'  ELSE 'n'  END
 FROM all_tables T JOIN ALL_TAB_COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME AND T.OWNER = C.OWNER
 LEFT JOIN ALL_COL_COMMENTS CC ON C.OWNER = CC.OWNER AND C.TABLE_NAME = CC.TABLE_NAME AND C.COLUMN_NAME = CC.COLUMN_NAME
 LEFT JOIN 
    (SELECT CONS.TABLE_NAME, CONS.OWNER, COLS.COLUMN_NAME, CONS.CONSTRAINT_TYPE
     FROM ALL_CONSTRAINTS CONS 
     JOIN ALL_CONS_COLUMNS COLS ON CONS.CONSTRAINT_NAME = COLS.CONSTRAINT_NAME 
     WHERE CONS.CONSTRAINT_TYPE = 'P'
    ) PK ON C.OWNER = PK.OWNER AND C.TABLE_NAME = PK.TABLE_NAME AND C.COLUMN_NAME = PK.COLUMN_NAME
    where UPPER(T.TABLE_NAME) in ( 逗号分隔的表名 ) and t.OWNER NOT IN ('SYS', 'SYSTEM', 'OUTLN', 'XDB', 'WMSYS', 'CTXSYS', 'MDSYS')
 ORDER BY T.TABLE_NAME, C.COLUMN_ID

3. Oracle获取视图sql

3.1 有DBA权限获取方式

select distinct view_name from all_views 
where owner not in ('SYS','SYSTEM','OUTLN','XDB','WMSYS','CTXSYS','MDSYS') 
and OWNER ='库名';

3.2 普通权限获取方式

select distinct view_name from all_views 
where owner not in ('SYS','SYSTEM','OUTLN','XDB','WMSYS','CTXSYS','MDSYS') 
and OWNER ='库名';

4. Oracle获取视图字段sql

4.1 有DBA权限获取方式

SELECT 
		c.table_name AS view_name, 
		NVL ( cm.comments, '' ) AS cmt, 
		c.column_name, 
		cm.comments, 
		c.data_type, 
		c.data_length, 
		c.data_precision, 
		c.data_scale, 
		c.nullable, 
		 'n' AS is_primary_key 
FROM 
		dba_tab_columns c 
LEFT JOIN dba_col_comments cm ON c.OWNER = cm.OWNER 
AND c.table_name = cm.table_name 
AND c.column_name = cm.column_name 
WHERE 
		c.OWNER = '库名' 
AND c.table_name IN ( 逗号分隔的表名 )
ORDER BY c.table_name,c.column_id 

4.2 普通权限获取方式

SELECT 
		c.table_name AS view_name, 
		NVL ( cm.comments, '' ) AS cmt, 
		c.column_name, 
		cm.comments, 
		c.data_type, 
		c.data_length, 
		c.data_precision, 
		c.data_scale, 
		c.nullable, 
		 'n' AS is_primary_key 
FROM 
		all_tab_columns c 
LEFT JOIN all_col_comments cm ON c.OWNER = cm.OWNER 
AND c.table_name = cm.table_name 
AND c.column_name = cm.column_name 
WHERE 
		c.OWNER = '库名' 
AND c.table_name IN ( 逗号分隔的表名 )
ORDER BY c.table_name,c.column_id 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Oracle中行列互转从基础到进阶过程详解

    Oracle中行列互转从基础到进阶过程详解

    Oracle行列转换是一种强大的数据处理技术,它在数据操作中扮演着重要角色,尤其是在清洗、整理和合并数据时,下面这篇文章主要介绍了Oracle中行列互转从基础到进阶的相关资料,需要的朋友可以参考下
    2025-09-09
  • oracle数据库查询表被锁多种方式实现

    oracle数据库查询表被锁多种方式实现

    本文介绍了在Oracle数据库中如何通过V$LOCKED_OBJECT、DBA_OBJECTS和DBA_LOCKS、VSESSION和VLOCK、DBA_BLOCKERS和DBA_WAITERS、V$LOCK等视图查询表是否被锁定的方法,这些视图提供了详细的锁信息,包括锁的类型、模式以及持有锁的会话信息,需要的朋友可以参考下
    2024-10-10
  • oracle 11g导出数据时报ORA 1455错误的处理方法

    oracle 11g导出数据时报ORA 1455错误的处理方法

    oracle 11g导出数据时报ORA 1455错误,原因是由于导出的该用户的表可能存在空数据表,下面是正确的导出步骤
    2014-08-08
  • Oracle SID存在解決方法

    Oracle SID存在解決方法

    如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装
    2009-06-06
  • oracle 存储过程返回 结果集 table形式的案例

    oracle 存储过程返回 结果集 table形式的案例

    这篇文章主要介绍了oracle 存储过程返回 结果集 table形式的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PDO取Oracle lob大字段,当数据量太大无法取出的问题的解决办法

    PDO取Oracle lob大字段,当数据量太大无法取出的问题的解决办法

    最近,做sns的项目,用PDO连接Oracle数据库,读取Clob字段,当数据量非常大的时候(上万个字符),返回空值,从网上也没有查到相关的资料。自己刻苦研究加上同事帮助,终于解决了。废话就不说了,下面把内容贴出来。
    2009-03-03
  • navicat使用Oracle创建库以及用户超详细教程

    navicat使用Oracle创建库以及用户超详细教程

    本文介绍如何使用Navicat连接Oracle数据库,步骤包括准备工作、新建连接、输入用户名和密码、测试连接、建立库和用户、授权以及测试的相关资料,需要的朋友可以参考下
    2024-09-09
  • [Oracle] 浅析令人抓狂的ORA-01555问题

    [Oracle] 浅析令人抓狂的ORA-01555问题

    首先要说明的一点是:ORA-01555错误是一个“安全”的错误,它不会造成数据丢失或损坏,只是会让接收到该错误的查询无法继续。以下就是对发生ORA-01555错误的原因进行了介绍,需要的朋友可以参考下
    2013-07-07
  • PLSQL一些常用知识点梳理总结

    PLSQL一些常用知识点梳理总结

    这篇文章主要为大家介绍了PLSQL一些常用的知识点梳理总结,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 使用oracle发生标识符无效问题及解决

    使用oracle发生标识符无效问题及解决

    这篇文章主要介绍了使用oracle发生标识符无效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论