该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

项目开发中遇到了获取Oracle字段定义的长度问题,现在将此总结一下,希望能给需要此需求的同行们有个帮助。

在Oracle中获取一个字符的长度的方法很简单,就是利用oracle自带的函数(length()或者lengthb()):

如:

sql> select length('silver bullet') from dual;

结果:13

但有时候,我们需要知道某个表中的某个字段的长度比如

create table CMS_COSTSYS_VOLUMEDETAIL

(

CALCULATION_DETAIL_ID NUMBER(10) not null,

CALCULATION_LINE_ID NUMBER(10) not null,

CALCULATION_HEADER_ID NUMBER(10) not null,

CURRENCY_CODE VARCHAR2(3) not null,

RELATION_CHN VARCHAR2(600),

RELATION_ENG VARCHAR2(600),

CALCULATION_ENG VARCHAR2(600),

CALCULATION_CHN VARCHAR2(600),

CALCULATION_VALUE NUMBER(9,5),

LAST_UPDATED_BY VARCHAR2(20) not null,

CREATED_BY VARCHAR2(20) not null,

CREATED_TIME NUMBER(14) not null,

LAST_UPDATED_TIME NUMBER(14) not null,

CALCULATION_FLAG VARCHAR2(1) default 'N' not null

)

我们在代码中想知道 RELATION_ENG 的长度当数据结构(RELATION_ENG 的长度由VARCHAR2(600)变为VARCHAR2(900),)发生变化时,我们希望在代码中也能随着变化而不需将600改为900。

select t.DATA_LENGTH

from USER_TAB_COLUMNS t

where t.TABLE_NAME = 'CMS_COSTSYS_VOLUMEDETAIL'

and t.COLUMN_NAME = 'RELATION_ENG'

其中:

1.【USER_TAB_COLUMNS 】是Oracle系统视图,定义如下:

create or replace view sys.user_tab_columns as

select TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_TYPE_MOD, DATA_TYPE_OWNER,

DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLE, COLUMN_ID,

DEFAULT_LENGTH, DATA_DEFAULT, NUM_DISTINCT, LOW_VALUE, HIGH_VALUE,

DENSITY, NUM_NULLS, NUM_BUCKETS, LAST_ANALYZED, SAMPLE_SIZE,

CHARACTER_SET_NAME, CHAR_COL_DECL_LENGTH,

GLOBAL_STATS, USER_STATS, AVG_COL_LEN, CHAR_LENGTH, CHAR_USED,

V80_FMT_IMAGE, DATA_UPGRADED, HISTOGRAM

from USER_TAB_COLS

where HIDDEN_COLUMN = 'NO'

2.【DATA_LENGTH】 是字段定义的长度。

3.【TABLE_NAME 】是要查询字段所属的表名

4.【COLUMN_NAME 】是要查询字段名

自己写了一个方法:

#region 获取指定表的指定字段的长度GetColumnLength

///

/// 获取指定表的指定字段的长度

///

/// 字段所属表的表名

/// 字段名

/// 非负:字段的实际定义的长度,负数:-1 -- 表名或字段名有空值;-2 -- 查询数据库异常;-3 -- 其他异常

protected int GetColumnLength(string table_name, string column_name)

{

int iColumeLength = 0;

if (table_name == "" || table_name == null || column_name == "" || column_name == null)

{

return -1;

}

StringBuilder sb = new StringBuilder();

sb.Append(@"select t.DATA_LENGTH ");

sb.Append(@" from USER_TAB_COLUMNS t ");

sb.Append(@" where t.TABLE_NAME = '");

sb.Append(table_name);

sb.Append(@"' ");

sb.Append(@"and t.COLUMN_NAME = '");

sb.Append(column_name);

sb.Append(@"'");

string strSQL = sb.ToString();

DataTable dtblColumeLength = new DataTable();

//执行sql将查询出来的值放到dtblColumeLength 中

//橘黄色部分自己根据实际的情况,主要功能是执行sql语句,将查询出来的结果放到dtblColumeLength

messageEntity = cms_costsys_volumedetailUip.GetDataTableBySql(strSQL);

if (messageEntity.MsgFlag)

{

dtblColumeLength = (DataTable)messageEntity.MsgValue;

}

else

{

MessageBox.Show("数据检索失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

return -2;

}

if (dtblColumeLength == null || dtblColumeLength.Rows.Count <= 0)

{

return -3;

}

iColumeLength = Int32.Parse(dtblColumeLength.Rows[0]["DATA_LENGTH"].ToString());

return iColumeLength;

}

#endregion

oracle长度字段,【转】Oracle中如何取一个字段的定义长度相关推荐

  1. mysql触发器 当记录的指定字段发生变化时,更新表中的另外一个字段,或者更新另外一张关联表中关联记录的字段...

    2019独角兽企业重金招聘Python工程师标准>>> 注意:语句中出现的old,new,now(),都为数据库自带的关键字,此处不做解释. 两种情况: 第一种:一张表中,更新某条记 ...

  2. java中list里面存放map,根据map中的某一个字段进行排序

    Java中list里面存放map,根据map中的某一个字段进行排序 例如: [java] view plaincopy package com; import java.util.ArrayList; ...

  3. Python 轻松解决从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合。(对比用库和不用库的方法)

    文章目录 一.问题说明 二.解决方法 一.问题说明 问题来源:粉丝的提问 从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合(对比用库和不用库的方法) 二.解决方法 iter ...

  4. 从K个数组中任取一个字符串进行按顺序拼接

    完整题目 给定K个字符串数组,从这K个数组中任取一个字符串,按顺序拼接,列出所有可能的字符串组合 样例: input:[['a','b','cd'],['de'],['e','f']] output: ...

  5. matlab分块矩阵取某一块_matlab中怎么取一个矩阵的一部分

    展开全部 matlab中要取一个62616964757a686964616fe4b893e5b19e31333366306562矩阵的一部分,可以参考以下内容: 比如说有一个5×5的矩阵,想取它右下脚 ...

  6. SAP ABAP ALV控制显示的网格中的每一个字段属性

    字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.常用的字段如下: row_pos:默认值为0,可选值为1.2.3,既最大分3级别显示 field ...

  7. 在数据库中如何新增一个字段?

    工作中常会用到:交给测试时,会让交付新增的字段的SQL语句. 如何在数据库中新增一个字段: alter TABLE t_Execution(表名) add FIsModifyQuote(列名) int ...

  8. php mysql 时间字段_php – MySQL中各种日期/时间字段类型的优...

    > TIMESTAMP存储在MySQL专有方法中(尽管它基本上只是一个由年,月,日,小时,分钟和秒组成的字符串),此外,只要插入或更改记录,TIMESTAMP类型的字段就会自动更新.显式字段值给 ...

  9. java长度为100的数组_产生一个int数组,长度为100,并向其中随机插入1-100,不重复...

    #define RANDOM(X) (rand() % X + 1) int main() { //标志数组 int book[] = {}; int result[] = {}; //默认的随机数种 ...

最新文章

  1. php-cgi 重启,自动监测和重启 FastCGI 服务
  2. 由于市场判断失误 希捷降低收入预期
  3. Java知多少(43)异常处理基础
  4. python父类和子类_python子类父类
  5. 评价一个人,就是要看他把时间都花在哪了
  6. python如何让图片镜像翻转_98后常春藤学霸林之秋,一作拿下CVPR最佳论文提名,首次挑战图片翻转不变性假设...
  7. makefile例子《一》
  8. PrimeNG01 angular集成PrimeNG
  9. HttpHandler解析并展示PDF文档内容
  10. go - range
  11. 130242014051 《商品详情模块》需求分析与设计实验课小结
  12. python requests json_python:解析requests返回的response(json格式)
  13. swift——富文本文字的简单使用
  14. 网络工程师——正则表达式(模糊匹配)
  15. 计算机二级黑板板书书写,清华老师们的板书惊艳朋友圈!8个板书技巧让黑板亮起来!...
  16. 关于NI美国国家仪器音频分析器使用技巧(4461音频分析仪)
  17. EJB是什么,以及weblogic和tomcat的区别
  18. iOS 音乐播放器demo讲解
  19. 我查查 6.6 去校验分析
  20. 两位诺奖得主给“太上老君托梦”的天价白酒当首席科学家

热门文章

  1. 大数据学习笔记01:大数据概述
  2. 20.校准相机——纯粹的方式,简单的方式,多平面校准_4
  3. windows10升级助手_利用系统自带应用在Windows 10上实现电脑免费拨打电话
  4. 2017.5.9 积木大赛 思考记录
  5. 计算机网络学习笔记:第三章
  6. sap idoc生成文件传到别的服务器,IDOC 实例详解
  7. Java中什么时候throws_何时在Java方法声明中使用throws?
  8. mysql语句二级查询_mysql_2 基本查询语句
  9. cve-2020-0796_CVE20200796 | Windows SMBv3客户端/永痕之黑漏洞复现
  10. 导数与微分的知识点思维导图_高中生物思维导图知识点总结