在oracle sql2008 獲取 表字段的 說明,主鍵,類型,長度等語句

1:

 select distinct ss.column_name 字段,
ss.data_type 字段類型 ,ss.data_length 字段長度
,case when cc.constraint_type='U' then '是'
when cc.constraint_type='P' then '是'
else '' end 是否為主鍵
,ss.comments 字段說明 ,ss.low_value MY_Opinion
from
(select  distinct aa.column_name ,
aa.data_type  ,aa.data_length
,bb.comments  ,substr(aa.low_value,1,0)low_value
from all_tab_columns aa,user_col_comments bb where
aa.table_name=upper('AUTO_GENHDR')and bb.table_name=upper('AUTO_GENHDR')and  aa.COLUMN_NAME=bb.column_name )ss
left join
(select distinct coll.column_name,con.constraint_type
from user_constraints con,  user_cons_columns coll
where con.constraint_name = coll.constraint_name  and coll.table_name =upper('AUTO_GENHDR')
and   con.constraint_type in('U' ,'P')
) cc on cc.column_name=ss.column_name

 

執行后是:

 

字段

字段類型

字段長度

是否為主鍵

字段說明

MY_OPINION

COM_ID

CHAR

10

 

提交者id

ACCT_CODE

CHAR

10

 

賬款編號

COM_CODE

CHAR

10

 

公司編號

LAST_UPDAT

DATE

7

 

 

最後更新時間

 

 

select count(*) from all_tab_columns where owner='AZONA' order by table_name--10739
select   * from  user_cons_columns where owner='AZONA' order by table_name--679
select  * from user_col_comments --10379
select * from user_tables where
select * from user_tab_columns--706

 

 

获取表名:

 Oracle的user_talbes用于记录了用户表信息。

select * from user_tables

 获取某个表的字段:

USER_TAB_COLS中记录了用户表的列信息。下面是别人写的:

SELECT USER_TAB_COLS.TABLE_NAME as 表名,USER_TAB_COLS.COLUMN_NAME as 列名 , USER_TAB_COLS.DATA_TYPE as 数据类型, USER_TAB_COLS.DATA_LENGTH as 长度, USER_TAB_COLS.NULLABLE as 是否为空,USER_TAB_COLS.COLUMN_ID as 列序号,user_col_comments.comments as 备注 FROM USER_TAB_COLS inner join user_col_comments on user_col_comments.TABLE_NAME=USER_TAB_COLS.TABLE_NAME and user_col_comments.COLUMN_NAME=USER_TAB_COLS.COLUMN_NAME

 

如何从Oracle、中取得表的注释

user_tab_comments;表注释

        user_col_comments;表字段注释

        以上两个只能获取自己用户的表的注释信息,如果要访问自己能够访问的其他用户的表,则需要使用:

        all_tab_comments;表注释

        all_col_comments;表字段注释

        当然,如果有DBA权限,则可以使用

        dba_tab_comments;表注释

        dba_col_comments;表字段注释

        dba*和all*最好指定owner条件。user*没有该字段

        user_tab_comments;表注释

        user_col_comments;表字段注释

        以上两个只能获取自己用户的表的注释信息,如果要访问自己能够访问的其他用户的表,则需要使用:

        all_tab_comments;表注释

        all_col_comments;表字段注释

        当然,如果有DBA权限,则可以使用

        dba_tab_comments;表注释

        dba_col_comments;表字段注释

        dba*和all*最好指定owner条件。user*没有该字段

 

 

关于Oracle与SqlServer中获取所有字段、主键、外键的sql语句 标签: 主键  外键  sql  
最近在做的社会网络分析原型系统需要将多种不同数据库中的表的字段、主外键信息读出,实现这些功能费了不少功夫,记录下来以备用吧
Oracle:
查询某个表中的字段名称、类型、精度、长度、是否为空
select COLUMN_NAME,DATA_TYPE,DATA_PRECISION,DATA_SCALE,NULLABLE 
from user_tab_columns 
where table_name ='YourTableName'
查询某个表中的主键字段名
select col.column_name 
from user_constraints con,  user_cons_columns col 
where con.constraint_name = col.constraint_name 
and con.constraint_type='P' 
and col.table_name = 'YourTableName'
查询某个表中的外键字段名称、所引用表名、所应用字段名
select distinct(col.column_name),r.table_name,r.column_name 
from 
user_constraints con,
user_cons_columns col, 
(select t2.table_name,t2.column_name,t1.r_constraint_name 
 from user_constraints t1,user_cons_columns t2 
 where t1.r_constraint_name=t2.constraint_name 
 and t1.table_name='YourTableName'
 ) r 
where con.constraint_name=col.constraint_name 
and con.r_constraint_name=r.r_constraint_name 
and con.table_name='YourTableName'

SQLServer中的实现:
字段:
SELECT c.name,t.name,c.xprec,c.xscale,c.isnullable 
FROM systypes t,syscolumns c 
WHERE t.xtype=c.xtype 
AND c.id = (SELECT id FROM sysobjects WHERE name='YourTableName') 
ORDER BY c.colid

主键(参考SqlServer系统存储过程sp_pkeys):
select COLUMN_NAME = convert(sysname,c.name)               
from                                                       
sysindexes i, syscolumns c, sysobjects o                   
where o.id = object_id('[YourTableName]')                  
and o.id = c.id                                            
and o.id = i.id                                            
and (i.status & 0x800) = 0x800                             
and (c.name = index_col ('[YourTableName]', i.indid,  1) or     
     c.name = index_col ('[YourTableName]', i.indid,  2) or     
     c.name = index_col ('[YourTableName]', i.indid,  3) or     
     c.name = index_col ('[YourTableName]', i.indid,  4) or     
     c.name = index_col ('[YourTableName]', i.indid,  5) or     
     c.name = index_col ('[YourTableName]', i.indid,  6) or     
     c.name = index_col ('[YourTableName]', i.indid,  7) or     
     c.name = index_col ('[YourTableName]', i.indid,  8) or     
     c.name = index_col ('[YourTableName]', i.indid,  9) or     
     c.name = index_col ('[YourTableName]', i.indid, 10) or     
     c.name = index_col ('[YourTableName]', i.indid, 11) or     
     c.name = index_col ('[YourTableName]', i.indid, 12) or     
     c.name = index_col ('[YourTableName]', i.indid, 13) or     
     c.name = index_col ('[YourTableName]', i.indid, 14) or     
     c.name = index_col ('[YourTableName]', i.indid, 15) or     
     c.name = index_col ('[YourTableName]', i.indid, 16)       
     )

外键:
select t1.name,t2.rtableName,t2.name 
from 
(select col.name, f.constid as temp 
 from syscolumns col,sysforeignkeys f 
 where f.fkeyid=col.id 
 and f.fkey=col.colid 
 and f.constid in 
 ( select distinct(id)  
   from sysobjects 
   where OBJECT_NAME(parent_obj)='YourTableName' 
   and xtype='F' 
  ) 
 ) as t1 , 
(select OBJECT_NAME(f.rkeyid) as rtableName,col.name, f.constid as temp 
 from syscolumns col,sysforeignkeys f 
 where f.rkeyid=col.id 
 and f.rkey=col.colid 
 and f.constid in 
 ( select distinct(id) 
   from sysobjects 
   where OBJECT_NAME(parent_obj)='YourTableName' 
   and xtype='F' 
 ) 
) as t2 
where t1.temp=t2.temp

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值