oracle 查询所有表结构,整理当前数据库所有表结构

博客讨论了在Oracle数据库中遇到的两个问题:1) 定义为NUMBER类型的字段未设置长度导致显示异常;2) long类型默认值无法在navicat中正常显示。作者分享了用于查询数据库表结构的SQL脚本,并尝试将long转换为char来解决默认值显示问题,但未成功。文章寻求解决方案并提供了查询所有表结构和主外键信息的SQL查询示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存在的问题: 1.定义为NUMBER未设置长度,会显示为 NUMBER(,)

                    2.默认值为long 不能显示字段的信息(navicat中可以显示)

效果图:默认值暂不能正常显示, 我试着long转char无果,大佬若是能解决麻烦评论一下

--查询当前数据库所有表结构
SELECT c.TABLE_NAME 表名,
       tc.COMMENTS 表备注,
       c.COLUMN_ID 序号,
       c.COLUMN_NAME 字段名,
       (case
         when DATA_TYPE = 'NUMBER' then
          DATA_TYPE || '(' || to_char(DATA_PRECISION) || ',' ||
          to_char(DATA_SCALE) || ')'
         when DATA_TYPE = 'DATE' then
          DATA_TYPE
         else
          DATA_TYPE || '(' || DATA_LENGTH || ')'
       end) as 数据类型,
       NullAble "On null",
       (case (select cons.CONSTRAINT_TYPE
            from user_cons_columns conc
            join (select *
                   from user_constraints
                  where CONSTRAINT_TYPE = 'P'
                     or CONSTRAINT_TYPE = 'R') cons
              on conc.CONSTRAINT_NAME = cons.CONSTRAINT_NAME
           where conc.TABLE_NAME = c.TABLE_NAME
             and conc.COLUMN_NAME = c.COLUMN_NAME)
         when 'P' then
          '主键'
         when 'R' then
          '外键'
       end) as 主外键,
       DATA_DEFAULT 默认值,
       cc.COMMENTS 备注
  FROM USER_TAB_COLUMNS c
  left join USER_COL_COMMENTS cc
    on c.TABLE_NAME = cc.TABLE_NAME
   and c.COLUMN_NAME = cc.COLUMN_NAME
  left join USER_TAB_COMMENTS tc
    on c.TABLE_NAME = tc.TABLE_NAME
 where c.TABLE_NAME in (select TABLE_NAME from user_tables)
 order by c.TABLE_NAME, c.COLUMN_ID
--查询所有数据库
select distinct owner from ALL_TABLES order by owner
--查询某数据库有多少表,不包含视图
select t.TABLE_NAME from ALL_TABLES t WHERE t.owner ='库名'
----主外键 约束类型:P 主键 R 外键 U 唯一 C 检查
select b.OWNER,b.table_name, b.column_name,c.constraint_type
  from user_cons_columns b
  join user_constraints c
    on c.CONSTRAINT_NAME = b.CONSTRAINT_NAME
--where c.constraint_type like '%约束类型%'
--and b.table_name like '%表名%'
=========================================================================================
--查询所有表结构, OWNER为数据库名,主键必须设置约束且所属当前"登录"数据库才能识别,原因:user_constraints
SELECT
--OWNER 数据库,
 c.TABLE_NAME 表名,
 tc.COMMENTS 表备注,
 c.COLUMN_ID 序号,
 c.COLUMN_NAME 字段名,
 (case
   when DATA_TYPE = 'NUMBER' then
    DATA_TYPE || '(' || to_char(DATA_PRECISION) || ',' ||
    to_char(DATA_SCALE) || ')'
   when DATA_TYPE = 'DATE' then
    DATA_TYPE
   else
    DATA_TYPE || '(' || DATA_LENGTH || ')'
 end) as 数据类型,
 NullAble "On null",
 (case (select cons.CONSTRAINT_TYPE
      from user_cons_columns conc
      join (select *
             from user_constraints
            where CONSTRAINT_TYPE = 'P'
               or CONSTRAINT_TYPE = 'R') cons
        on conc.CONSTRAINT_NAME = cons.CONSTRAINT_NAME
     where conc.TABLE_NAME = c.TABLE_NAME
       and conc.COLUMN_NAME = c.COLUMN_NAME)
   when 'P' then
    '主键'
   when 'R' then
    '外键'
 end) as 主外键,
 DATA_DEFAULT 默认值,
 cc.COMMENTS 备注
  FROM ALL_TAB_COLUMNS c
  left join ALL_COL_COMMENTS cc
    on c.TABLE_NAME = cc.TABLE_NAME
   and c.COLUMN_NAME = cc.COLUMN_NAME
   and c.owner = cc.OWNER
  left join ALL_TAB_COMMENTS tc
    on c.OWNER = tc.OWNER
   and c.TABLE_NAME = tc.TABLE_NAME
 where c.owner = '库名'
   and c.TABLE_NAME in
       (select TABLE_NAME from ALL_TABLES WHERE owner = '库名')
--and c.COLUMN_ID = '1' --第一个字段,可以统计表格个数
--and c.TABLE_NAME = 'RBS_T_APPL_AGENCY' --某表
 order by c.TABLE_NAME, c.COLUMN_ID

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值