COBOL DB2 数据类型对应关系

COBOL DB2数据类型对应关系

在COBOL 内嵌入SQL 语句,SELECT ... FROM ... INTO ... 。FETCH ... INTO... 。要注意DB2内的数据类型与COBOL 内定义的HOST 变量的数据类型的对应关系,否则会出SQL ERROR CODE -303。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

DB2|COBOL

-----------------------------

DECIMAL()

DATE()

TIMESTAMP

SMALLINT

GRAPHIC |||||S9()COMP-3X()X()X()X()或N()

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++SQL0303N A value cannot be assigned to a host variable in the

SELECT, VALUES, or FETCH statement because the data

types are not compatible.

Explanation:

An imbedded SELECT or VALUES statement selects into a host

variable, but the data type of the variable is not compatible

with the data type of the corresponding SELECT-list or

VALUES-list element. Both must be numeric, character, or

graphic. For a user-defined data type, the host variable might

be defined with an associated built-in data type that is not

compatible with the result type of the FROM SQL transform

function defined in the transform group for the statement. For

example, if the data type of the column is date or time, the data

type of the variable must be character with an appropriate

minimum length.

The statement cannot be processed.

User Response:

Verify that the table definitions are current and that the host

variable has the correct data type. For a user-defined data type,

verify that the associated built-in type of the host variable is

compatible with the result type of the FROM SQL transform

function defined in the transform group for the statement.

sqlcode :-303

sqlstate :42806

SQL0303N 不可将值赋给SELECT 、VALUES 或FETCH

语句中的主变量,因为数据类型不兼容。

解释:

嵌入的SELECT 或VALUES

语句选择到主变量中,但该变量的数据类型与对应的SELECT 列表或

VALUES 列表元素的数据类型不兼容。两者都必须为数字、字符或图形。对于

用户定义的数据类型,用来定义主变量的关联内置数据类型可能与该语句的

变换组中定义的FROM SQL

变换函数的结果类型不兼容。例如,若列的数据类型是日期或时间,则变量

的数据类型必须为有适当最小长度的字符。

不能处理该语句。

用户响应:

验证表定义是否是最新的,且主变量的数据类型是否正确。对于用户定义的

数据类型,验证主变量的关联内置类型与该语句的变换组中定义的FROM

SQL 变换函数的结果类型是否兼容。

sqlcode :-303

sqlstate :42806

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

DB2数据库的内置数据类型主要分成数值型(numeric )、字符串型(character string )、图形字符串(graphic string )、二进制字符串型(binary string )或日期时间型(datetime )。还有一种叫做DATALINK 的特殊数据类型。DATALINK 值包含了对存储在数据库以外的文件的逻辑引用。

数值型数据类型包括SMALLINT 、INTEGER 、BIGINT 、DECIMAL(p,s)、REAL 和DOUBLE 。所有数值都有符号和精度。精度是指除符号以外的二进制或十进制的位数。如果数字的值大于等于零,就认为符号为正。

*小整型,SMALLINT :小整型是两个字节的整数,精度为5位。小整型的范围从-32,768到32,767。

*大整型,INTEGER 或INT :大整型是四个字节的整数,精度为10位。大整型的范围从-2,147,483,648到2,147,483,647。

*巨整型,BIGINT :巨整型是八个字节的整数,精度为19位。巨整型的范围从-9,223,372,036,854,775,808到9,223,372,036,854,775,807。

*小数型,DECIMAL(p,s)、DEC(p,s)、NUMERIC(p,s)或NUM(p,s):小数型的值是一种压缩十进制数,它有一个隐含的小数点。压缩十进制数将以二-十进制编码

(binary-coded decimal ,BCD )记数法的变体来存储。小数点的位置取决于数字的精度(p )和小数位(s )。小数位是指数字的小数部分的位数,它不可以是负数,也不能大于精度。最大精度是31位。小数型的范围从-10**31+1到10**31-1。

*单精度浮点数(Single-precision floating-point ),REAL :单精度浮点数是实数的32位近似值。数字可以为零,或者在从-3.402E+38到-1.175E-37或从

1.175E-37到3.402E+38的范围内。

*双精度浮点数(Double-precision floating-point ),DOUBLE ,DOUBLE

PRECISION 或FLOAT :双精度浮点数是实数的64位近似值。数字可以为零,或者在从-1.79769E+308到-2.225E-307或从2.225E-307到1.79769E+308的范围内。

字符串是字节序列。字符串包括CHAR(n)类型的定长字符串和VARCHAR(n)、LONG VARCHAR 或CLOB(n)类型的变长字符串。字符串的长度就是序列中的字节数。

*定长字符串,CHARACTER(n)或CHAR(n):定长字符串的长度介于1到254字节之间。如果没有指定长度,那么就认为是1个字节。

*变长字符串,VARCHAR(n)、CHARACTER VARYING(n)或CHAR VARYING(n):VARCHAR(n)类型的字符串是变长字符串,最长可达32,672字节。

*LONGVARCHAR :LONG VARCHAR 类型的字符串是变长字符串,最长可达32,700字节。

*字符大对象字符串(Character Large Object String ),CLOB(n[KM G]):CLOB 是变长字符串,最长可以达到2,147,483,647字节。如果只指定了n ,那么n 的值就是最大长度。如果指定了nK ,那么最大长度就是n*1,024(n 的最大值为2,097,152)。如果指定了nM ,那么最大长度就是n*1,048,576(n 的最大值为

2,048)。如果指定了nG ,那么最大长度就是n*1,073,741,824(n 的最大值是2)。CLOB 用于存储基于大单字节字符集(single-byte character set ,SBCS )字符的数据或基于混合(多字节字符集(MBCS )和SBCS )字符的数据。图形字符串是表示双字节字符数据的字节序列。图形字符串包括类型为GRAPHIC(n)的定长图形字符串和类型为VARGRAPHIC(n)、LONG VARGRAPHIC 和DBCLOB(n)的变长图形字符串。字符串

的长度就是序列中双字节字符的数目。

*定长图形字符串,GRAPHIC(n):定长图形字符串的长度介于1到127个双字节字符之间。如果没有指定长度,就认为是1个双字节字符。

*变长图形字符串,VARGRAPHIC(n):VARGRAPHIC(n)类型的字符串是变长图形字符串,最大长度可达16,336个双字节字符。

*LONGVARGRAPHIC :LONG VARGRAPHIC 类型的字符串是变长图形字符串,最大长度可达16,350个双字节字符。

*双字节字符大对象字符串,DBCLOB(n[KM G]):双字节字符大对象是变长双字节字符图形字符串,最长可达1,073,741,823个字符。如果只指定了n ,那么n 就是最大长度。如果指定了nK ,那么最大长度就是n*1,024(n 的最大值为1,048,576)。如果指定了nM ,那么最大长度就是n*1,048,576(n 的最大值为1,024)。如果指定了nG ,那么最大长度就是n*1,073,741,824(n 的最大值是1)。DBCLOB 用于存储基于大DBCS (双字节字符集,double-byte character set )字符的数据。二进制字符串是字节序列。二进制字符串包括BLOB(n)类型的变长字符串,它用于容纳非传统型的数据,诸如图片、语音或混合媒体等,还可以容纳用户定义的类型及用户定义的函数的结构化数据。

*二进制大对象,BLOB(n[KM G]):二进制大对象是变长字符串,最长可达2,147,483,647字节。如果只指定了n ,那么n 就是最大长度。如果指定了nK ,那么最大长度就是n*1,024(n 的最大值为2,097,152)。如果指定了nM ,那么最大长度就是n*1,048,576(n 的最大值为2,048)。如果指定了nG ,那么最大长度就是n*1,073,741,824(n 的最大值是2)。

日期时间型数据类型包括DATE 、TIME 和TIMESTAMP 。日期时间值可在某些算术

和字符串操作中使用,而且兼容某些字符串,但它们既不是字符串,也不是数字。

*DATE:DATE 是一个由三部分组成的值(年、月和日)。年份部分的范围是从0001到9999。月份部分的范围是从1到12。日部分的范围是从1到n ,其中n 的值取决于月份。DATE 列长10个字节。

*TIME:TIME 是一个由三部分组成的值(小时、分钟和秒)。小时部分的范围是从0到24。分钟和秒部分的范围都是从0到59。如果小时为24,分钟和秒的值都是0。TIME 列长8个字节。

*TIMESTAMP:TIMESTAMP 是一个由七部分组成的值(年、月、日、小时、分钟、秒和微秒)。年份部分的范围是从0001到9999。月份部分的范围是从1到12。日部分的范围是从1到n ,其中n 的值取决于月份。小时部分的范围是从0到24。分钟和秒部分的范围都是从0到59。微秒部分的范围是从000000到999999。如果小时是24,那么分钟值、秒的值和微秒的值都是0。TIMESTAMP 列长26个字节。日期时间值的字符串表示:尽管DATE 、TIME 和TIMESTAMP 的值的内部表示对用户是透明的,日期、时间和时间戳记也可以用字符串来表示,CHAR 标量函数(请参阅SQL 的“词类(parts of speech )”)可以用于创建日期时间值的字符串表示。

*日期值的字符串表示是一个以数字开始,长度不少于8个字符的字符串。日期值的月份和日部分中前面的零可以省略。

*时间值的字符串表示是以数字开头,长度不少于4个字符的字符串。时间值的小时部分前面的零可以省略,秒部分可以完全省略。如果秒的值没有指定,那么就认为是0。

*时间戳记值的字符串表示是以数字开头,长度不少于16个字符的字符串。完整的时间戳记字符串表示形式为yyyy-mm-dd-hh.mm.ss.nnnnnn 。时间戳记值的月、日或小

时等几部分前面的零可以省略,微秒可以截断或完全省略。如果任何时间戳记值的微秒部分尾零被省略掉了,那么将假定空缺的数位上为零。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

COBOL 中使用PICTURE 子句来定义数据类型. 主要的数据类型有以下几类, 我将分几篇文章分别讲述他们的使用和注意的地方.

类型

字母形

字符形

数字形示例A(2)X(2)S9V99说明只能使用26个字符和空格. 可以使用字符集定义的字符和数字数字形有三个类型, binary, packed decimal, zoned decimal.

用于格式化数值输出数字编辑-zz9.99

其他如DBCS 类型, 浮点形在COBOL 使用很少.

对于字符, 字母形都比较好理解, 所占字符数, 就是其定义的个数. 对于数字编辑形, 仅仅用于格式化数值, 不能进行数值运算和布尔比较. 计算字符数需要如下计算:

eg:-zz99.99所占字符数就是计算所有定义字符数,

1(-)+2(zz)+2(99)+1(.)+2(99)=8.

表示前导0, 就是不显示前面的0.

eg:

PICTURE

-ZZ99.99

-ZZ99.99Value of Data +123.45-123.456Edited Result 123.45-123.45其中-号表示负数显示-号, 正数不显示+号. zz

至于详细的各类符合和数值编辑的使用, 将会专门写一章来讲述.

我们详细说一下数值形, 按照带不带符合, 可以区分符合形, 非符合形. 安装存储类型分为binary, packed decimal, zoned decimal.

以下举例详细说明,

zone decimal 一般称9型. eg 9(4)V99或者s9(4)V99,每个9占一位, 符号和V 不占位. 示例就分别是6. 如果这个值是1234.56, 在内存存储分别是'F1F2F3F4F5F6',

'F1F2F3F4F5C6'. 对于无符号, 就是123456的EBCDIC 码, 对于带符号, 对于正数, 最后的F 为C 表示正, 负数为D 表示负. 示例就是'C6'.

packed decmial 也是COMP-3型. 9(4)V99COMP-3或者s9(4)v99comp-3型. 存储长度计算为[x/2]+1,[x/2]+1表示9的总个数+1/2的取整, 原因是做了压缩存储, 这个示范就是4. 如果这个值是123456, 在内存存储分别是'0123456F' 和'0123456C', 对于无符号, 最后补个F 表示无符合, 对于带符合, 如果是正数就是C, 负数就是D. 所有总长度就是

[x/2]+1.

使用的时候, 数值型之间都可以直接进行各类操作. 但需要注意的是, 如果对于未赋值的COMP-3型, 在赋值前做任何计算操作, 将会导致数据例外, 但对于zoned decimal 就会才有缺省值, 不会有数据例外.

还有, 若是作为db2的hv, 就必须类型与DB2的类型匹配, 如果一个9型的来接受, 也会造成错误.

COMP 型的变量常用于表示半个字或者整个字(主机一个字是4个字节), 比如半个字也就是16BIT, 对于有符合的数来说就是-32767~+32767,所以可以用S9(5)COMP 来表示, 当然也可以用S9(4)COMP 来表示(因为S9(4)表示的范围是-9999到+9999,一个字节存不下, 也需要2个自己存储), 对于一个字就是S9(8)或者S9(9).详细可以自己计算.


相关文章

  • 中小企业备份存储方案
  • 中小企业存储业务需求分析 随着市场经济的高速发展,在中国每 年都有数以万计的中小企业崛起,在 国民生产总值中,各种中小企业占有 相当的比重,跟随商场经济的变化, 我国中小企业得以飞速成长,但同时 也有一大部分中小企业由于各种原因 失去市场竞争力而导致失败.众所周 知,中小企业随时面临着严酷的市场 竞 ...

  • 数据库发展史的启示
  • 数据库发展史的启示 数据库技术从诞生到现在,在不到半个世纪的时间里,形成了坚实的理论基础.成熟的商业产品和广泛的应用领域,吸引越来越多的研究者加入.数据库的诞生和发展给计算机信息管理带来了一场巨大的革命.三十多年来,国内外已经开发建设了成千上万个数据库,它已成为企业.部门乃至个人日常工作.生产和生活 ...

  • 产品使用说明书
  • 字符型液晶显示模块 产品使用说明书 一SVM系列字符型液晶显示模块概述 数字 符号等的点阵型液晶显示模块 它的一面用导电橡胶将电路与液晶显示器件 字符型液晶显示模块是一类专门用于显示字母字符型液晶显示模块是在一块双面印刷线路板上连接 1. 外形尺寸: 75×55×8.4mm 2. 显示角度3. 视域 ...

  • 数据库监测指标
  • 数据库监测指标 数据库 监测器 监测参数 游标数 Session数 每秒事务数 数据库锁数量 死锁数量 缓冲池命中率 Cache命中率 进程内存利用率 Largest Chunk Listener状态 交易量 Oracle数据库性能 Block Changes Per Transaction Blo ...

  • 编程语言发展史
  • 1954Fortran FORTRAN(FORmulaTRANslator的缩写)意为"公式翻译器",是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域.FORTRAN语言以其特有的功能在数值.科学和工程计算领域发挥着重要作用. 1958LISP LISP语言 ...

  • (1)数据交换平台.功能描述
  • 数字校园系列软件产品 数据交换平台 功能描述 目录 1 产品概述............................................................................................................... - 1 - ...

  • 缓冲池和表空间规划原则
  • 一. 历史项目配置收集 二. 缓冲池设计 足够的缓冲池大小是数据库拥有良好性能的关键所在,因为它可以减少磁盘 I/O 这一最耗时的操作. 缓冲池是影响数据库性能最大的参数, 所以必须合理的设计缓冲池. 达到最优的缓冲池利用率. 缓冲池和表空间的页大小必须是相同的 在物理设备上设计如何放置表空间和容器 ...

  • DBA职业生涯规划指南
  • DBA 职业生涯规划指南 DBA 职业生涯规划指南 DBA是Database Administrator的简称,即我们常说的数据库管理员.在数据信息呈爆炸式增长的今天,DBA的角色已经发生了重大的转变.各种维护计划.数据备份以及安全存储等工作都已经成为了DBA们的家常便饭,可以说一名DBA应该是IT ...

  • 2自考软件工程试题及答案02333
  • 全国2009年10月高等教育自学考试 软件工程试题 课程代码:02333 一.单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内.错选.多选或未选均无分. 1.软件危机产生的时期是(D) A."程序设计时代 ...

© 2024 范文中心 | 联系我们 webmaster# onjobs.com.cn