Oracle Mysql Postgrsql 查询表的所有字段(字段名称、字段类型、字段长度)、主键

本文详细介绍了如何在Oracle、Mysql和Postgresql数据库中查询表的所有字段,包括字段名称、字段类型和字段长度,同时提供了查询表主键的步骤,适合数据库管理员和开发者参考。

一、查询表字段:

1.Oracle数据库脚本:

-- 查询表字段 oracle
select UPPER(B.COLUMN_NAME) as FIELD_NAME,
       UPPER(B.DATA_TYPE) as FIELD_DATA_TYPE,
       case
         when B.DATA_SCALE is null then
          0
         else
          B.DATA_SCALE
       end as FIELD_DECIMAL,
       (case
         when B.DATA_PRECISION is null then
          B.CHAR_LENGTH
         else
          B.DATA_PRECISION
       end) as FIELD_LENGTH,
       case
         when B.NULLABLE = 'N' then
          '1'
         else
          '0'
       end as IS_NULL,
       C.COMMENTS as FIELD_COMMENT
  from (select A.TABLE_NAME,
               A.COLUMN_NAME,
               A.DATA_TYPE,
               A.DATA_SCALE,
               A.DATA_PRECISION,
               A.CHAR_LENGTH,
               A.NULLABLE
          from USER_TAB_COLUMNS A
         where A.TABLE_NAME = UPPER('表名')) B
  left join USER_COL_COMMENTS C
    on B.TABLE_NAME = C.TABLE_NAME
   and B.COLUMN_NAME = C.COLUMN_NAME
 order by B.COLUMN_NAME;

2.Mysql 数据库脚本:

select UPPER(COLUMN_NAME) FIELD_NAME,
       UPPER(DATA_TYPE) FIELD_DATA_TYPE,
       case
         when NUMERIC_SCALE is null then
          0
         else
          NUMERIC_SCALE
       end as FIELD_DECIMAL,
       case
         when CHARACTER_MAXIMUM_LENGTH is null then
          NUMERIC_PRECISION
         else
          CHARACTER_MAXIMUM_LENGTH
       end FIELD_LENGTH,
       case
         when UPPER(IS_NULLABLE) = 'NO' then
          '0'
         else
          '1'
       end IS_NULL,
       COLUMN_COMMENT FIELD_COMMENT
  from INFORMATION_SCHEMA.COLUMNS
 where TABLE_SCHEMA = 'scheme名称或者数据库用户名'
   and UPPER(TABLE_NAME) = UPPER('表名')
 order by COLUMN_NAME;

3.postgresql数据库脚本:

select UPPER(A.ATTNAME) FIELD_NAME,
       UPPER(P.TYPNAME) FIELD_DATA_TYPE,
       A.ATTTYPMOD - 4 as FIELD_LENGTH,
       case
         when A.ATTNOTNULL = 'T' then
          '0'
         else
          '1'
       end as IS_NULL,
       DB.DESCRIPTION FIELD_COMMENT
  from PG_TABLES T
 inner join PG_CLASS C
    on T.TABLENAME = C.RELNAME
  left join PG_DESCRIPTION D
    on C.OID = D.OBJOID
   and D.OBJSUBID = 0
  left join PG_DESCRIPTION DB
    on C.OID = DB.OBJOID
   and DB.OBJSUBID > 0
  left join PG_ATTRIBUTE A
    on C.OID = A.ATTRELID
   and DB.OBJSUBID = A.ATTNUM
  left join PG_TYPE P
    on A.ATTTYPID = P.OID
  left join PG_ATTRDEF AT
    on C.OID = AT.ADRELID
   and A.ATTNUM = AT.ADNUM
 where UPPER(C.RELNAME) = UPPER('表名') 
 order by A.ATTNUM;

二、查询表主键

1.oracle数据库:

select UPPER(COLUMN_NAME)
  from USER_CONS_COLUMNS
 where UPPER(TABLE_NAME) = UPPER('表名')
   and CONSTRAINT_NAME in (select CONSTRAINT_NAME
                             from USER_CONSTRAINTS
                            where UPPER(TABLE_NAME) = UPPER('表名')
                              and CONSTRAINT_TYPE = 'P');

2.mysql数据库:

select UPPER(COLUMN_NAME)
  from INFORMATION_SCHEMA.KEY_COLUMN_USAGE
 where UPPER(TABLE_NAME) = UPPER('表名')
   and TABLE_SCHEMA = 'scheme实例名或者用户名'
   and CONSTRAINT_NAME = 'PRIMARY';

3.postgresql数据库:

select PG_ATTRIBUTE.ATTNAME
  from PG_CONSTRAINT
 inner join PG_CLASS
    on PG_CONSTRAINT.CONRELID = PG_CLASS.OID
 inner join PG_ATTRIBUTE
    on PG_ATTRIBUTE.ATTRELID = PG_CLASS.OID
   and PG_ATTRIBUTE.ATTNUM = PG_CONSTRAINT.CONKEY[1]
 inner join PG_TYPE
    on PG_TYPE.OID = PG_ATTRIBUTE.ATTTYPID
 where UPPER(PG_CLASS.RELNAME) = UPPER('表名')
   and PG_CONSTRAINT.CONTYPE = 'p';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值