oracle

关注公众号 jb51net

关闭
首页 > 数据库 > oracle > Oracle不同权限获取表,视图,字段的sql整理

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

作者:未来@音律

这篇文章主要介绍了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 

总结

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

您可能感兴趣的文章:
阅读全文