oracle长度字段,【转】Oracle中如何取一个字段的定义长度
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
项目开发中遇到了获取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中如何取一个字段的定义长度相关推荐
- mysql触发器 当记录的指定字段发生变化时,更新表中的另外一个字段,或者更新另外一张关联表中关联记录的字段...
2019独角兽企业重金招聘Python工程师标准>>> 注意:语句中出现的old,new,now(),都为数据库自带的关键字,此处不做解释. 两种情况: 第一种:一张表中,更新某条记 ...
- java中list里面存放map,根据map中的某一个字段进行排序
Java中list里面存放map,根据map中的某一个字段进行排序 例如: [java] view plaincopy package com; import java.util.ArrayList; ...
- Python 轻松解决从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合。(对比用库和不用库的方法)
文章目录 一.问题说明 二.解决方法 一.问题说明 问题来源:粉丝的提问 从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合(对比用库和不用库的方法) 二.解决方法 iter ...
- 从K个数组中任取一个字符串进行按顺序拼接
完整题目 给定K个字符串数组,从这K个数组中任取一个字符串,按顺序拼接,列出所有可能的字符串组合 样例: input:[['a','b','cd'],['de'],['e','f']] output: ...
- matlab分块矩阵取某一块_matlab中怎么取一个矩阵的一部分
展开全部 matlab中要取一个62616964757a686964616fe4b893e5b19e31333366306562矩阵的一部分,可以参考以下内容: 比如说有一个5×5的矩阵,想取它右下脚 ...
- SAP ABAP ALV控制显示的网格中的每一个字段属性
字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.常用的字段如下: row_pos:默认值为0,可选值为1.2.3,既最大分3级别显示 field ...
- 在数据库中如何新增一个字段?
工作中常会用到:交给测试时,会让交付新增的字段的SQL语句. 如何在数据库中新增一个字段: alter TABLE t_Execution(表名) add FIsModifyQuote(列名) int ...
- php mysql 时间字段_php – MySQL中各种日期/时间字段类型的优...
> TIMESTAMP存储在MySQL专有方法中(尽管它基本上只是一个由年,月,日,小时,分钟和秒组成的字符串),此外,只要插入或更改记录,TIMESTAMP类型的字段就会自动更新.显式字段值给 ...
- java长度为100的数组_产生一个int数组,长度为100,并向其中随机插入1-100,不重复...
#define RANDOM(X) (rand() % X + 1) int main() { //标志数组 int book[] = {}; int result[] = {}; //默认的随机数种 ...
最新文章
- php-cgi 重启,自动监测和重启 FastCGI 服务
- 由于市场判断失误 希捷降低收入预期
- Java知多少(43)异常处理基础
- python父类和子类_python子类父类
- 评价一个人,就是要看他把时间都花在哪了
- python如何让图片镜像翻转_98后常春藤学霸林之秋,一作拿下CVPR最佳论文提名,首次挑战图片翻转不变性假设...
- makefile例子《一》
- PrimeNG01 angular集成PrimeNG
- HttpHandler解析并展示PDF文档内容
- go - range
- 130242014051 《商品详情模块》需求分析与设计实验课小结
- python requests json_python:解析requests返回的response(json格式)
- swift——富文本文字的简单使用
- 网络工程师——正则表达式(模糊匹配)
- 计算机二级黑板板书书写,清华老师们的板书惊艳朋友圈!8个板书技巧让黑板亮起来!...
- 关于NI美国国家仪器音频分析器使用技巧(4461音频分析仪)
- EJB是什么,以及weblogic和tomcat的区别
- iOS 音乐播放器demo讲解
- 我查查 6.6 去校验分析
- 两位诺奖得主给“太上老君托梦”的天价白酒当首席科学家
热门文章
- 大数据学习笔记01:大数据概述
- 20.校准相机——纯粹的方式,简单的方式,多平面校准_4
- windows10升级助手_利用系统自带应用在Windows 10上实现电脑免费拨打电话
- 2017.5.9 积木大赛 思考记录
- 计算机网络学习笔记:第三章
- sap idoc生成文件传到别的服务器,IDOC 实例详解
- Java中什么时候throws_何时在Java方法声明中使用throws?
- mysql语句二级查询_mysql_2 基本查询语句
- cve-2020-0796_CVE20200796 | Windows SMBv3客户端/永痕之黑漏洞复现
- 导数与微分的知识点思维导图_高中生物思维导图知识点总结