首页 > 数据库技术 > 详细

数据库类型研究

时间:2020-01-19 15:42:19      阅读:60      评论:0      收藏:0      [点我收藏+]

我从USER_TAB_COLS中取内容,从USER_COL_COMMENTS中取备注可以得到下面的表结构

SELECT
USER_TAB_COLS.COLUMN_ID 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_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
WHERE USER_TAB_COLS.TABLE_NAME = ‘AI_HFSC_ZH_CHK‘ ORDER BY 列序号

技术分享图片

 

 

 

但是如果用plsql查询该表的表结构,可以发现不一样的状况

技术分享图片

 

 

 

如果出错,那一定是我的语句找错了,那么,我应该怎么改这个语句,让我得到的数据与plsql提供的表结构数据一致呢?

 

select A.COLUMN_ID as 列序号,
       A.COLUMN_NAME as 列名,
       case
         when A.DATA_TYPE = CHAR then
          A.DATA_TYPE || ( || A.DATA_LENGTH || )
         when A.DATA_TYPE = VARCHAR2 then
          A.DATA_TYPE || ( || A.DATA_LENGTH || )
         when A.DATA_TYPE = DATE then
          A.DATA_TYPE
         when A.DATA_TYPE = NUMBER and A.DATA_PRECISION IS NULL AND
              a.DATA_SCALE = 0 then
          INTEGER
         when A.DATA_TYPE = NUMBER AND a.DATA_SCALE = 0 then
          A.DATA_TYPE || ( || A.DATA_PRECISION || )
         when A.DATA_TYPE = NUMBER AND a.DATA_SCALE != 0 then
          A.DATA_TYPE || ( || A.DATA_PRECISION || , || A.DATA_SCALE || )
       END as 数据类型,
     
       decode(C.COLUMN_NAME, null, ‘‘, ) as 主键,
       decode(A.NULLABLE, Y, ) as 可为空,
       B.comments as 备注
  from sys.user_tab_cols A,
        sys.user_col_comments B,
       (select col.column_name, c.table_name, col.owner
          from user_constraints c, user_cons_columns col   
         where c.constraint_name = col.constraint_name   and
         c.constraint_type = P) C
 where upper(A.TABLE_NAME) = AI_HFSC_ZH_CHK   
       and A.TABLE_NAME = B.table_name   
       and A.COLUMN_NAME = B.column_name
     and A.Table_Name = C.TABLE_NAME(+)   
       and A.COLUMN_NAME = C.COLUMN_NAME(+)   
 
 order by A.TABLE_NAME, A.Column_Id

技术分享图片

 

如果说查询当前User所有的外键

--查询外键约束的列名: 
select ucc.constraint_name,ucc.table_name,ucc.column_name
from user_cons_columns ucc 
left join user_constraints uc on uc.constraint_name=ucc.constraint_name
where uc.constraint_type=R ;

 

 然后加入对于外键的查询    

-----------解决了外键的问题,但时  数据类型、备注 又出问题了
select A.COLUMN_ID as 列序号,
       A.COLUMN_NAME as 列名,
       case
         when A.DATA_TYPE = CHAR then
          A.DATA_TYPE || ( || A.DATA_LENGTH || )
         when A.DATA_TYPE = VARCHAR2 then
          A.DATA_TYPE || ( || A.DATA_LENGTH || )
         when A.DATA_TYPE = DATE then
          A.DATA_TYPE
         when A.DATA_TYPE = NUMBER and A.DATA_PRECISION IS NULL AND
              a.DATA_SCALE = 0 then
          INTEGER
         when A.DATA_TYPE = NUMBER AND a.DATA_SCALE = 0 then
          A.DATA_TYPE || ( || A.DATA_PRECISION || )
         when A.DATA_TYPE = NUMBER AND a.DATA_SCALE != 0 then
          A.DATA_TYPE || ( || A.DATA_PRECISION || , || A.DATA_SCALE || )
       END as 数据类型,
       decode(C.COLUMN_NAME, null, ‘‘, ) as 主键,
       decode(d.constraint_name,null, ‘‘, ) as 外键,
       decode(A.NULLABLE, Y, ) as 可为空,
       B.comments as 备注
  from sys.user_tab_cols A,
        sys.user_col_comments B,
       (select col.column_name, c.table_name, col.owner
          from user_constraints c, user_cons_columns col   
         where c.constraint_name = col.constraint_name   and
         c.constraint_type = P) C,
         (select ucc.constraint_name,ucc.table_name,ucc.column_name
from user_cons_columns ucc 
left join user_constraints uc on uc.constraint_name=ucc.constraint_name
where uc.constraint_type=R) D
  
 where A.TABLE_NAME = ACT_RU_JOB   
       and A.TABLE_NAME = B.table_name   
       and A.COLUMN_NAME = B.column_name
     and A.Table_Name = C.TABLE_NAME(+)   
       and A.COLUMN_NAME = C.COLUMN_NAME(+)   
       and a.TABLE_NAME=d.table_name(+) and a.COLUMN_NAME=d.column_name(+)
 order by A.TABLE_NAME, A.Column_Id

 

 应该是什么地方出错了

技术分享图片

数据库类型研究

原文:https://www.cnblogs.com/adamgq/p/12213758.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!