Oracle 和 DB2有哪些区别

Oracle 和 DB2有哪些区别

1、取前N条记录

Oracle:Select * from TableName where rownum <= N;

DB2:Select * from TableName fetch first N rows only;

2、取得系统日期

Oracle:Select sysdate from dual;

DB2:Select current timestamp from sysibm.sysdummy1;

3、空值转换

Oracle:Select productid,loginname,nvl(cur_rate,'0') from TableName ;

DB2:Select productid,loginname,value(cur_rate,'0') from TableName;

Coalesce(cur_rate,'0')

4、类型转换(8版有了to_char,to_date,9版新增了to_number)

Oracle:select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;

DB2:select varchar(current timestamp) from sysibm.sysdummy1;

##       Oracle数据类型改变函数:to_char()、to_date()、to_number()等;

如果仅仅取年,月,日等,可以用to_char(sysdate, 'YYYY'),to_char('MM') ,to_char('DD')取得。

只取年月日TRUNC(SYSDATE),

取时分秒TO_CHAR(SYSDATE,'HH24:MI:SS')。

##        DB2数据类型改变函数:char()、varchar()、int()、date()、time()等;

取得年,月,日等的写法:YEAR(current timestamp),MONTH(current timestamp),DAY(current timestamp),HOUR(current timestamp),MINUTE(current timestamp),SECOND(current timestamp),MICROSECOND(current timestamp),

只取年月日可以用DATE(current timestamp),取时分秒TIME(current timestamp)。

Char()是定长字符串(1-255),varchar()为非定长字符串(1-32672)

日期,时间形态变为字符形态: char(current date),char(current time)

将字符串转换成日期或时间形态:TIMESTAMP('2002-10-2012:00:00'),DATE('2002-10-20'),

DATE('10/20/2002'),TIME('12:00:00')

##       目前DB2 V8也支持to_char和to_date

5、快速清空大表

Oracle:truncate table TableName ;

DB2:alter table TableName active not logged initially with empty table;

6、关于ROWID

Oracle它是由数据库唯一产生的,在程序里可以获得

DB2       v8也有此功能。

7、To_Number

Oracle:select to_number('123') from dual;

DB2:select cast('123' as integer) from sysibm.sysdummy1;

SELECT CAST ( current time as char(8)) FROMsysibm.sysdummy1

8、创建类似表

Oracle:create table a as select * from b ;

DB2:create table a like b ;

CREATE TABLE tab_newAS select col1,col2…FROMtab_old DEFINITION ONLY (8版有效,9版无效)

9、decode方法

Oracle:decode方法(DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值))或者case语句

DB2中只有CASE表达式

SELECT id ,name ,

CASE

       WHEN integer(flag)=0 THEN ‘假’

       WHEN integer(flag)=1 THEN ‘真’

       ELSE ‘异常’

END

       FROM TEST

或者

SELECT id ,name ,

CASE integer(flag)

       WHEN 0 THEN ‘假’

       WHEN 1 THEN ‘真’

       ELSE ‘异常’

END

       FROM TEST

10、子查询(8版,9版也支持子查询)

Oracle:直接用子查询

Db2:with语句

WITH a1 AS

(select max(id) as aa1 from test )

   select id ,aa1 from test ,a1

11、数据类型

比较大的差别:

Oracle:char 2000

DB2:      char 254

Oracle: date   datetime

Db2:       DATE:日期TIME:时间TIMESTAMP:日期时间

1、数据类型转换函数


整型转字符型
字符串转整形
字符串转浮点型
浮点型转字符串
字符串转日期
字符串转时间戳
日期转字符串

ORACLE
to_char(1)
to_number('1')
to_number('1.1')
to_char(1.1)
to_date('2007-04-26','yyyy-mm-dd')
to_date('2007-04-26 08:08:08','YYYY-MM-DD HH24:MI:SS')
to_char(to_date('2007-04-29','yyyy-mm-dd'),'yyyy-mm-dd')

DB2
char(1)
int('1')
double('1.1')
char(1.1)
date('2007-04-26')
to_date('2007-04-26 08:08:08','YYYY-MM-DD HH24:MI:SS')
char(date('2007-04-29'))

兼容写法
cast(1 as char)
cast('1' as int)



兼容

2、Where条件弱类型判断
oracle: where 字符型字段 in (整形) 是允许,DB2不允许
select 'abc' from dual where '1' in (1) 在oracle下可通过
select 'abc' from sysibm.sysdummy1 where '1' in (1) 在DB2下报错

oracle:where 字符型字段=数字型字段 允许,DB2不允许

select 'abc' from dual where '1'=1 在oracle下可通过
select 'abc' from sysibm.sysdummy1 whre '1'=1 在DB2下报错


3、replace关键字
oracle支持,DB2不支持 create or replace语句在DB2下是非法的


4、子查询别名
ORACLE 支持select * from(select 1 from dual) 或者 select * from(select 1 from dual) t

DB2 支持select * from(select 1 from sysibm.sysdummy1) t 或者 select * from(select 1 from sysibm.sysdummy1) as t

固兼容的写法是select * from(子查询) t


5、DATE数据类型的区别
ORACLE中DATE型也是带有时分秒的,但DB2下DATE只是年月日,如'2007-04-28',且可作为字符串直接操作,DB2中要记录时分秒必须采用TIMESTAMP型

一个采用hibernate后常见的兼容问题是:

如果在映射文件中定义了某个字段为Date型

<property name="createTime" type="java.util.Date" >

         <column name="CREATE_TIME" length="7" />

</property>

则在DB2下,此字段必须定义为timestamp,而不能定义成DATE,不然会报出字符串右截断的错误


对于DB2来说,在查询条件中可以直接用字符串指定日期或时间戳类型字段的值,例如 where create_date = '2007-04-26' 、where create_timestamp = '2007-04-26 08:08:08' ,无须使用字符串转日期函数


6、分页的处理
如果采用JDBC分页的话,注意rownum在DB2中不受支持,比如从masa_area表中取得area_id最小的10条记录,语句分别如下,注意这里的别名t书写方法

ORACLE: select t.* from (select rownum as r1 ,masa_area.* from masa_area order by area_id) t where t.r1<=10

DB2: select t.* from (select rownumber() over() as r1 ,masa_area.* from masa_area order by area_id) t where t.r1<=10


7、decode函数
decode函数在DB2不被支持,兼容的写法是采用case when


8、NVL函数
nvl写法在DB2不被支持,兼容的写法是采用coalesce

ORACLE: select NVL(f_areaid,'空') from masa_user 等同于 select coalesce(f_areaid,'空',f_areaid) from masa_user

DB2: select coalesce(f_areaid,'空',f_areaid) from masa_user


9、substr的不同
DB2 substr举例如下:

masa_group表的f_groupCode字段定义成VARCHAR(100),所以下面这个语句不会出错,如果是substr(f_groupCode,1,101)就出错了

select * from masa_group where substr(f_groupCode,1,50) = '001006' order by f_groupcode

在DB2下无错,但是

select * from masa_group where substr('001006', 1, 50) = '001006' order by f_groupcode

就报错,说第三个参数超限

这是因为'001006'已经定义为一个长度为6的charater了


这点和ORACLE有很大不同,请大家注意


如果是要从第一位取到最后一位,稳妥的办法是不要加第三个参数

ORACLE:select substr('123456',1) from dual

DB2:select substr('123456',1) from sysibm.sysdummy1

都没有问题

因为项目需要,要将Oracle上的东西转移到DB2,于是收集整理了一些需要修改点的注意事项,拿出来大家分享。

ORACLE和DB2实现相同功能的实例(主要以Oracle8I和DB2 7.X为例,已测试)

取前N条记录

Oracle

Select * from TableName where rownum <= N;

DB2

Select * from TableName fetch first N rows only;

取得系统日期

Oracle

Select sysdate from dual;

DB2

Select current timestamp from sysibm.sysdummy1;

空值转换

Oracle

Select productid,loginname,nvl(cur_rate,'0') from TableName ;

DB2

Select productid,loginname,value(cur_rate,'0') from TableName;

类型转换

Oracle

select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;

DB2

select varchar(current timestamp) from sysibm.sysdummy1;

 

■Oracle数据类型改变函数:to_char()、to_date()、to_number()等;如果仅仅取年,月,日等,可以用to_char(sysdate, 'YYYY'),to_char('MM') ,to_char('DD')取得。只取年月日TRUNC(SYSDATE),取时分秒TO_CHAR(SYSDATE,'HH24:MI:SS')。

■DB2数据类型改变函数:char()、varchar()、int()、date()、time()等;取得年,月,日等的写法:YEAR(current timestamp),MONTH(current timestamp),DAY(current timestamp),HOUR(current timestamp),MINUTE(current timestamp),SECOND(current timestamp), MICROSECOND(current timestamp),只取年月日可以用DATE(current timestamp),取时分秒TIME(current timestamp)。Char()是定长字符串(1-255),varchar()为非定长字符串(1-32672)
日期,时间形态变为字符形态: char(current date),char(current time)
将字符串转换成日期或时间形态:TIMESTAMP('2002-10-20 12:00:00'),DATE('2002-10-20'),DATE('10/20/2002'),TIME('12:00:00')

快速清空大表

Oracle

truncate table TableName ;

DB2

alter table TableName active not logged initially with empty table;

关于ROWID

Oracle

它是由数据库唯一产生的,在程序里可以获得

DB2

有此概念,但不能被程序获得。解决方案待定(高人请联系本人 caoxicao@hotmail.com)。

To_Number

Oracle

select to_number('123') from dual;

DB2

select cast('123' as integer) from sysibm.sysdummy1;

复制创建表

Oracle

create table a as select * from b ;

DB2

create table a like b ;

 

字符串的截取:属于DB2,试试看:  
   
  SELECT   LEFT(STRINGFIELD1,   2),   RIGHT(STRINGFIELD2)   FROM   TABLE1  

 

 

DB2错误代码/SQL返回码信息对照<!--newcoin-->

用COBOL链接DB2时,出现DB2错误信息时,如果你不懂代码是什么意思,可以用这份资料查找,

当然你也可以直接在db2的命令行下输入:db2 ? SQL30081N,系统会给出一些提示信息.

 

 

sqlcode

sqlstate

DB2错误信息(按sqlcode排序)

000

00000

SQL语句成功完成

 

01xxx

SQL语句成功完成,但是有警告

+012

01545

未限定的列名被解释为一个有相互关系的引用

+098

01568

动态SQL语句用分号结束

+100

02000

没有找到满足SQL语句的行

+110

01561

用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统

+111

01590

为2型索引设置了SUBPAGES语句

+117

01525

要插入的值的个数不等于被插入表的列数

+162

01514

指定的表空间被置为检查挂起状态

+203

01552

使用非唯一的名字来解决命名的限定列

+204

01532

命名的对象未在DB2中定义

+206

01533

命名的列不在SQL语句中指定的任何表中存在

+218

01537

因为SQL语句引用一个远程对象,不能为该SQL语句执行EXPLAIN

+219

01532

命名的PLAN TABLE不存在

+220

01546

不正确定义PLAN TABLE,检查命名列的定义

+236

01005

SQLDA中的SQLN的值至少应于所描述的列的个数一样大

+237

01594

至少有一个被描述的列应该是单值类型,因此扩展的SQLVAR条目需要另外的空间

+238

01005

至少应有一个被描述的列是一个LOB,因此扩展的SQLVAR条目需要另外的空间

+239

01005

至少应有一个被描述的列应是单值类型,因此扩展的SQLVAR条目需要另外的空间

+304

01515

该值不能被分配给宿主变量,因为该值不再数据类型的范围之内

+331

01520

不能被翻译的字符串,因此被设置为NULL

+339

01569

由于与DB2 2.2版本的子系统连接,所以可能存在字符转换问题

+394

01629

使用优化提示来选择访问路径

+395

01628

设置了无效的优化提示,原因代码指定了为什么,忽略优化提示

+402

01521

未知的位置

+403

01522

本地不存在CREAT ALIAS对象

+434

01608

在DB2未来发布的版本中将不支持指定的特性,IBM建议你停止使用这些特性

+445

01004

值被CAST函数截取

+462

01Hxx

由用户定义的函数或存储过程发出的警告

+464

01609

命名的存储过程超出了它可能返回的查询结果集的个数限制

+466

01610

指定由命名的存储过程返回的查询结果集的个数。成功完成

+494

01614

由存储过程返回的结果集的个数超过了由ASSOCIATE LOCATORS语句指定的结果集定位器的个数

+495

01616

因为倒台SQL的成本估算超出了在ELST中指定的警告阀值,所以发出警告

+535

01591

请求一个主健的定位更新,或请求一个使用自我引出 约束的表的删除操作

+541

01543

命名外健是一个重复的引用约束

+551

01548

命名的授权ID缺少在命名的DB2对象上执行命名操作的权限

+552

01542

命名的授权ID缺少执行命名操作的权限

+558

01516

已经被授权该PUBLIC,因此WITH GRANT OPTION不可用

+561

01523

对ALTER REFERENCES INDEX 和TRIGGER特权,PUBLIC AT ALL LOCATION无效

+562

01560

因为GRANTEE已经拥有这些特权,所以一个或更多的特权被忽略

+585

01625

模式名指定了不止一次

+599

01596

没有为长字符数据类型(BLOB,CLOB和DBCLOB)建立比较函数

+610

01566

由于建立了一个指定为DEFER YES的索引,指定的对象处于PENDING状态,或者因为使用了ALTER INDEX改变关键值的范围,所以指定的对象处于PENDING状态

+625

01518

因为删除了主健索引,所以表定义被标注为不完整

+626

01529

删除了加强UNIQUE约束的索引,唯一性不在被加强

+645

01528

因为建立的索引中没有包含NULL,所以WHERE NOT NULL被忽略

+650

01538

不能更改或者建立已命名的表为从属表

+653

01551

在已指定的分区表空间中尚没有建立指定的分区索引,所以分区索引不可得

+655

01597

为CREATE或ALTER STOGROUP语句指定特定或者非特定的卷ID,在DB2较新发布的版本中(版本6以后)将不再支持他们

+658

01600

当建立目录索引时,不能指定SUBPAGES语句,SUBPAGES将被忽略,并缺省为1

+664

01540

分区索引的限制关键字超出了最大值

+738

01530

已命名的对象的更改可能像只读系统中对象的改变要求一样

+799

0157

SET语句中引用的特定寄存器不存在,将忽略 SET请求

+802

01519

数据溢出或者因除法异常而引起的数据异常错误

+806

01553

ISOLATION(RR)与LOCKSIZE PAGE 冲突

+807

01554

由于十进制乘法导致溢出

+863

01539

连接成功,但是只支持SBCS

+2000

56094

SUBPAGES不等于1的1型索引不能成为数据共享环境中的缓冲池组依赖者

+2002

01624

因为指定的缓冲池不允许超高速缓存,GNPCACHE指定被忽略

+2007

01602

因为DB2子系统的参数禁用“提示(hiats)”所以不能指定优化提示

+30100

01558

分布式协议错误被检测到,提供原来的SQLCODE和SQLSTATE

-007

42601

SQL语句中由非法字符

-010

42603

字符串常量非正常终止;检查到有遗漏的引号标志

-029

42601

需要INTO语句

-060

42815

某特定数据类型的长度或者标量规范无效

-084

42612

不能执行SQL语句,因为该语句对动态SQL无效或者对OS/390的DB2无效

-097

42601

在单位类型、用户自定义的函数以及过程中不能使用带有CAST的LONG VARCHAR或LONGVARGRAPHIC

-101

54001

SQL语句超出了已确定的DB2限制:例如,表的数目太多,语句中的字节太多

-102

54002

字符串常量太长

-103

42604

无效数学文字

-104

42601

SQL语句中遇到非法符号

-105

42604

无效的字符串格式;通常引用一个格式不正确的图形字符串

-107

42622

对象名太长

-108

42601

RENAME语句中指定的名字有错误,不能使用限定词

-109

42601

指定了无效语句;例如CREATE VIEW不能包含ORDER BY 语句

-110

42606

遇到了无效的十六进制的文字

-111

42901

指定的列函数没有给出列名

-112

42607

无效的列函数语法;列函数不能运行与其他的列函数之上

-113

42602

遇到无效字符

-114

42961

该语句的位置名称必须与当前服务器匹配,但是却没有匹配

-115

42601

因为比较运算符没有伴着一个表达式或者列表,遇到了无效谓词

-117

42802

待插入的数值的个数于被插入的行中的列数不相等

-118

42902

数据修改语句(UPDATE或DELETE)和FROM语句中的表和视图命名不合法

-119

42803

HAVING语句中的列的列表与GROUP BY语句中的列列表不匹配

-120

42903

不允许WHERE语句、SET语句、VALUES语句或者SET ASSIGNMENT语句引用列函数

-121

42701

在INSERT或UPDATE语句中,某一列被非法引用了两次

-122

42803

非法使用了列函数。因为没有用于一个列函数的所有列不再GROUP BY语句中

-123

42601

特定位置的参数必须是一个常数或者一个关键词

-125

42805

ORDER BY语句中指定了无效数字,该数字要么小于1要么大于选定的列数

-126

42829

不能为一个UPDATE语句指定ORDER BY语句

-127

42905

在子选择中DISTINCT只能指定一次

-128

42601

SQL谓词中NULL使用不当

-129

54004

SQL语句中包含的表多于15个

-130

22019

ESCAPE语句必须为一个字符

 

22025

无效的ESCAPE模式

-131

42818

LIKE谓词只能用于字符数据

-132

42824

LIKE语句、ESCAPE语句、LOCATE函数或POSSTR函数中有无效运算对象

-133

42906

无效相关子查询引用

-134

42907

大于255字节的列被不正确使用

-136

54005

排序关键字的长度大于4000字节

-137

54006

被连接的字符串太大;字符的最大值为32767;图形的最大值为16382

-138

22011

SUBSTR列函数的第二个或第三个操作符无效

-142

42612

不支持的SQL语句。该语句可能在另外的RDBMS上有效,也有可能在其他的上下文中有效(例如,VALUES只能在触发器中出现)

-144

58003

指定的段号无效

-147

42809

某一源函数不能更改。要改变源函数,必须删除该源函数并重新建立他

-148

42809

RENAME和ALTER无法执行。RENAME不能对视图或者活动RI.ST表重新命名。ALTER不能用于改变列的长度,因为该列参与了RI、一个用户退出程序、全局的临时表或打开DATACAPTURE CHANGES表的列

-150

42807

触发活动的INSERT,UPDATE或DELETE语句中指定了无效的视图更新或一个无效的转换表

-151

42808

试图更新一个不可更新的视图的列、一个DB2 CATALOG表的列或者一个ROWID列

-152

42809

DROP CHECK试图删除一个参照约束,或者DROP FOREIGN试图删除一个检查约束

-153

42908

无效的视图建立请求,必须为旋转列表中列出的列出的未命名的列或者重复的列提供一个名字

-154

42909

不能用UNION、UNION ALL或者一个远程表建立视图

-156

42809

在视图上建立索引是非法的,或者在ALTER TABLE,CREATE TRIGGER,DROP TABLE或LOCK TABLE语句上指定一个不是表的其他对象这是无效的

-157

42810

必须在FOREIGN KEY语句中指定一个表名

-158

42811

视图的列和选择列表中的列不相匹配

-159

42089

无效DROP或COMMENT ON语句

-160

42813

对该视图的WITH CHECK OPTION无效

-161

44000

正被更新的视图WITH CHECK OPTION语句使得这行不能被插入或更新

-164

42502

用户没有建立这个视图的权限

-170

42605

标量函数指定了无效的参数个数

-171

42815

标量函数指定了无效的数据类型长度或者无效数值

-173

42801

在非只读型的游标上不能指定隔离级别UR

-180

22007

DATE、TIME、TIMESTAMP值的字符串表示法的语法不对

-181

22001

不是有效的DATE、TIME、TIMESTAMP值

-182

42816

在算术表达式中的日期/时间值无效

-183

22008

在算术表达式中返回的日期/时间值的结果不在有效值的范围内

-184

42610

没有正确使用日期/时间值的参数标记

-185

57008

没有定义本定的日期/时间出口

-186

22505

改变本定的日期/时间出口引发这个程序的长度无效

-187

22506

MVS返回无效的当前日期/时间

-188

22503

字符串表示无效

-189

22522

指定的编码字符集的ID无效或没有定义

-190

42837

不能象所设定的那样改变(ALTER)列。只能改变(ALTER)VARCHAR列的长度

-191

22504

字符串中包含了无效的混合数据

-197

42877

当两个或多个表被联合在一起排序时,限定的列名不能在ORDER BY语句中使用

-198

42617

试图对空的字符串发布一个PREPARE或EXECUTE IMMEDIATE语句

-199

42601

SQL语句中使用了非法关键词

-203

42702

模糊列引用

-204

42704

没有定义的对象名

-205

42703

指定的表的列名无效

-206

42703

列名没有在FROM语句所引用的任何表中,或者没有在定义触发器所在的表中

-208

42707

不能ORDER BY指定列,应为该列不在选择列表中

-212

42712

指定的表名在触发器中不允许多次使用,只能使用一次

-214

42822

DISTINCT、ORDER BY 引起的无效表达式

-219

42704

因为PLAN_TABLE不存在,EXPLAIN无法执行

-220

55002

遇到无效的PLAN_TABLE列

-221

55002

如果为PLAN_TABLE定义了可供选择的列,那么,必须定义所有的列

-229

42708

指定的现场找不到

-240

428B4

LOCK TABLE语句的PART子句无效

-250

42718

没有定义本地位置名

-251

42602

记号无效

-300

22024

宿主变量或参数中的字符串不是以NULL为终止

-301

42895

无效的宿主变量数据类型

-302

22001

输入的变量值对指定的列无效

 

22003

输入的变量值对指定的列而言太大

-303

42806

因为数据类型不兼容,不能分配数值

-304

22003

因为数据超出了范围,不能分配数值

-305

22002

没有NULL指示符变量

-309

22512

因为引用的宿主变量被设置成NULL,所以谓词无效

-310

22501

十进制的宿主变量或参数包含非十进制数据

-311

22501

输入的宿主变量长度无效,或者时负值或者太大

-312

42618

没有定义宿主变量或者宿主变量不可用

-313

07001

宿主变量的个数不等于参数标识的个数

-314

42714

模糊的宿主变量引用

-327

22525

在最后分区的关键字范围内,不能插入行

-330

22021

不能成功的翻译字符串

-331

22021

字符串不能分配到宿主变量,因为其不能成功的被翻译

-332

57017

不能为两个命名的编码字符集的ID定义翻译规则

-333

56010

子类型无效导致翻译失败

-338

42972

ON语句无效,必须引用连接的列

-339

56082

访问DB2 2.2版本的子系统被拒绝,原因时ASCII到EBCDIC翻译不能进行

-350

42962

无效的大对象规范

-351

56084

SELECT列表中有不支持的数据类型

-352

56084

输入列表中有不支持的数据类型

-355

42993

LOB列太大,以至不能被记录在日志中

-372

428C1

每个表只允许有一个ROWID列

-390

42887

在上下文中指定的函数无效

-392

42855

自从前一次FETCH以来,指定游标的SQLDA已被不恰当的改变

-396

38505

在最后的访问过程中,视图执行SQL语句

-397

428D3

在某一列上不恰当的指定了GENERATED因为该列不是ROWID数据类型

-398

428D2

为某一个宿主变量请求LOCATOR,但是该宿主变量不是一个LOB

-399

22511

在INSERT语句中为ROWID列指定的值无效

-400

54027

在DB2编目中定义的用户自定义索引不能超过100个

-401

42818

算术操作符或比较操作符的操作对象不是兼容的

-402

42819

算术函数不能用于字符或日期时间数据

-404

22001

SQL语句指定的字符串太长

-405

42820

数值文字超出了范围

-406

22003

计算出的或者倒出的数值超出了范围

-407

23502

不能把NULL值插到定义为NOT NULL的列中

-408

42821

数值不能被更新或插入,因为他与列的数据类型不兼容

-409

42607

COUNT函数指定的运算对象无效

-410

42820

浮点文字笔30个字符的最大允许长度长

-411

56040

CURRENT SQLID使用无效

-412

42823

在子查询的选择列表中遇到了多个列

-413

22003

当转换为一个数字型数据类型时,数据溢出

-414

42824

LIKE谓词不能运行于用数字或日期时间类型定义的列

-415

42825

为UNION操作指定的选择列表不是联合兼容的

-416

42907

包含UNION操作符的SQL语句不允许有长的字符串列

-417

42609

两参数标识符作为运算对象被指定在同一谓词的两边

-418

42610

参数标识符使用无效

-419

42911

十进制除法无效

-420

22018

字符串自变量值不符合函数的要求

-421

42826

UNION操作的选择列表中没有提供相同数目的列

-423

0F001

为LOB或结果集定位器指定的值无效

-426

2D528

在不允许更新的应用服务器不允许执行COMMIT语句

-427

2D529

在不允许更新的应用服务器不允许执行ROLLBACK语句

-430

38503

在用户自定义的函数或存储过程中遇到了错误

-433

22001

指定的值太长

-435

428B3

无效的应用定义的SQLSTATE

-438

xxxxx

使用了RAISE_ERROR函数的应用发出了一个错误

-440

42884

存储过程或用户自定义函数的参数列表参数个数于预期的个数不匹配

-441

42601

与标量函数一起使用DISTINCT或ALL是不正确的用法

-443

42601

指定的外部函数返回错误的SQLSTATE

-444

42724

与被称为存储过程或用户自定义函数有关的程序不能找到

-449

42878

对存储过程或用户自定义的 函数,CREATE或ALTER语句不正确(缺失EXTERNAL NAME 子句)

-450

39501

存储过程或用户自定义函数写入存储器的值超过了参数声明的长度

-451

42815

CREATE FUNCTION中指定了不正确的数据类型

-453

42880

用户自定义函数中的RETURNS语句无效

-454

42723

指定的函数识别标记与已存在的另一函数的识别标记冲突

-455

42882

模式名不比配

-456

42710

为用户自定义函数指定的函数名已经存在

-457

42939

用户自定义函数或用户自定义类型正试图使用系统中定义的函数或者类型所用的名称

-458

42883

没有找到函数

-463

39001

特定的外部例程返回无效的SQLSTATE

-469

42886

参数定义为OUT或INOUT的CALL语句必须提供宿主变量

-470

39002

指定了NULL参数,但是该例程却不支持NULL

-471

55023

存储过程或用户自定义函数失败:提供原因代码

-472

24517

外部的函数程序使游标处于打开状态

-473

42918

用户自定义数据类型命名不能和系统定义的数据类型一样

-475

42866

结果类型不能被转换成RETURNS类型

-476

42725

在其模式中该函数不是独一无二的

-478

42893

不能DROP或REVOKE特定的对象,因为其他对象依赖于该对象

-480

51030

直到存储过程已经被CALL后,DESCRIBE PROCEDURE和ASSOCIATE LOCATORS才能被发布

-482

51030

存储过程不返回到任何一个定位器

-483

42885

CREATE FUNCTION语句中的参数个数与源函数中的参数个数不匹配

-487

38001

选择了NO SQL选项建立指定的存储过程或用户自定义函数,但却视图发布SQL语句

-491

42601

CREATE FUNCTION语句无效,因为该语句没有RETURNS语句或者因为该语句没有指定有效的SOURCE或者EXTERNAL语句

-492

42879

指定函数的指定参数的个数有错误

-495

57051

语句的估计处理器成本超出了资源限制

-496

51033

语句无法执行,因为当前服务器与调用存储过程的服务器不同

-497

54041

指定的数据库超过了32767 OBID的上限,或者CREATE DATABASE语句使之达到了32511DBID的上限

-499

24516

指定的游标已被分配到结果集,该结果集来自已经指定的存储过程

-500

24501

因为连接被破坏,WITH HOLD游标被关闭

-501

24501

在试图获取数据或关闭一个游标前必须打开一个游标

-502

24502

在没有关闭游标前不能再次打开游标

-503

42912

因为列在游标的FOR UPDATE OF语句中没有被指定,该游标用于获取该列,所以不能更新该列

-504

34000

不能引用一个游标,因为他不是定义到程序里的

-507

24501

在试图更新或者删除WHERE CURRENT OF前,必须打开游标

-508

24504

因为被引用的游标当前不是处于数据行上,所以不能被更新或删除

-509

42827

除了在游标上指定的那个表(该表由WHERE CURRENT OF语句引用的)以外,再也不能从别的表上更新数据

-510

42828

表或视图不能被修改

-511

42829

对不可修改的表或视图,FOR UPDATE OF语句无效

-512

56023

对远程对象的无效引用

-513

42924

一个别名不能再被定义成另外的别名

-514

26501

游标尚没有被准备

-516

26501

试图描述未准备好的SQL语句

-517

07005

因为SQL语句尚没有准备好,游标无效

-518

07003

试图执行尚没有准备好的SQL语句

-519

24506

当为游标的SQL语句发布一个准备语句是,游标不能是打开的

-525

51015

不能在已指定的程序包中执行SQL语句,因为在绑定时间内该程序包无效

-526

42995

在给定的上下文中,不能使用全局的临时表

-530

23503

对特定的约束名指定了无效的外健值

-531

23504

从版本5开始,父关键字的多行更新将试图删除一个外关键字依赖的父关键字值,在版本5以前,当引用主关键值外健值当前存在时,试图更新该主健值

-532

23504

删除操作违反了已指定的参照约束

-533

21501

多行插入无效,试图将多行插到自我引用的表中

-534

21502

可改变主健列值的更新语句不能在同一时刻用于更新多行

-535

21502

当从自我引用表中删除数据或者更新主健列时,不能指定WHERE CURRENT OF。不是版本5的子系统才调用该代码

-536

42914

因为某一特定表的参照约束存在,所以删除语句无效

-537

42709

在外健语句或主健语句的规范中,每个列的出现不能多于一次

-538

42830

无效的外健;不符合引用的表没有主健

-539

42888

不能定义外健,因为被引用的表没有主健

-540

57001

表定义不完整,直到为主健建立了唯一索引或UNIQUE语句、或者包含GENERATED BYDEFAULT属性的ROWID列

-542

42831

可以为空的列不允许作为主健的一部分包含在内

-543

23511

因为该表是指定了SET NULL删除规则的参照约束的父表而且检查约束不允许NULL,所以DELETE不能发生

-544

23512

不能用ALTER添加检查约束,因为已存在的某行与该检查约束冲突

-545

23513

INSERT或者UPDATE导致检查约束冲突

-546

42621

在CREATE或ALTER TABLE中指定的检查约束无效

-548

42621

因为指定的列而引起的检查约束无效

-549

42509

DYNAMICRULES(BIND)计划或程序包的无效SQL语句

-551

42501

用户试图对不拥有权限的特定的对象进行操作,或者表不存在

-552

42502

用户试图执行未被授权的操作

-553

42503

不能指定CURRENT SQLID,因为用户尚没有被允许改变那个ID

-554

42502

不能对你本身赋予一个权限

-555

42502

不能对你本身撤销一个权限

-556

42504

不能撤销用户没有拥有的权限

-557

42852

指定了不一致的授予或撤销关键词

-558

56025

为授予或撤销语句指定了无效的语句(一个或一组)

-559

57002

DB2权限机制已经禁用,授予或者撤销不能被发布

-567

42501

指定的权限ID缺少对指定的程序包的绑定权限

-571

25000

不允许多点更新

-573

42890

不能定义参照约束,因为已指定的父表中在指定的列上没有唯一健

-574

42864

指定的缺省与列定义冲突

-577

38002

试图修改用户自定义函数中的数据或者存储过程中的数据,但这些对象的建立没有选择MODIFIES SQL DATA选项

-579

38004

试图修改用户自定义函数中的数据或者存储过程中的数据,但这些对象的建立没有选择READ SQL DATA选项,也没有选择MODIFIES SQL DATA选项

-580

42625

CASE表达式中的结果表达式不能都是空的

-581

42804

CASE表达式中的结果表达式为不兼容的数据类型

-582

42625

SEARCHED-WHEN-CLAUSE中的查找条件指定了一个限定的、IN或EXISTS谓词

-583

42845

指定的函数失败,因为他不是决定性的,或者可能有外部动作

-585

42732

在当前路径中模式名不止一次出现

-586

42907

CURRENT PATH专用寄存器在长度上不能超过254字符

-587

428C6

项目引用的列表必须是同一个家族

-590

42734

在命名的存储过程或用户自定义的函数中的参数必须是独一无二的

-592

42510

没有授权权限,让你在WLM环境中建立的存储过程或者用户自定义函数

-601

42710

试图创建(或重命名)已经存在的对象

-602

54008

CREATE INDEX语句中指定的列太多

-603

23515

因为发现有重复值,所以不能建立唯一的索引

-604

42611

在CREATE或ALTER TABLE语句中的为数据类型指定的长度、精度以及标度无效

-607

42832

指定的INSERT、UPDATE或DELETE语句不能被发布,应为这些语句对DB2 CATLOG表执行写操作

-611

53088

当LOCKSIZE是TABLE或者TABLESPACE时,LOCKMAX必须为0

-612

42711

在同一个表、索引或试图中不允许有重复列名

-613

54008

主健或UNIQUE约束太长或者包含了太多的列

-614

54008

已经超过了索引的内部健长度的最大长度(255)限制

-615

55006

不能删除这个程序包,因为该程序包目前正在执行

-616

42893

指定的对象不能被删除,因为其他对象依赖于该对象

-617

56089

对于DB2版本6,1型索引无效。对于以前的版本,1型索引不能用LOCKSIZE ROW或LARGE表空间定义

-618

42832

对DB2 CATALOG表的请求操作时不允许的

-619

55011

DSNDB07不能修改,除非他先被停止了

-620

53001

对在DSNDB07中的表空间不允许指定该关键词

-621

58001

遇到了重复的DBID,遇到了系统问题

-622

56031

不能指定FOR MIXED DATA因为没有安装混合数据选项

-623

55012

不能为单一的表定义多个族索引

-624

42889

不能为单一的表定义多个主健

-625

55014

用主健定义的表要求唯一索引

-626

55015

不能发布ALTER语句来改变PRIQTY SECQTY或ERASE,除非先停止了表空间

-627

55016

不能发布ALTER语句来改变PRIQTY SECQTY或ERASE,除非先把表空间定义为使用存储器组的表空间

-628

42613

指定语句时相互排斥的(例如,不能分区一个分段的表空间)

-629

42834

因为该外健不能包含空值,所以SET NULL无效

-630

56089

不能为1型索引指定WHERE NOT NULL

-631

54008

无效的外健;要么是比254个字节长,要么包含的列数多于40

-632

42915

指定的删除规则禁止把这个表定义为已制定表的从属表

-633

42915

无效删除规则;必须使用特定的强制删除规则

-634

42915

在这种情况下,DELETE CASCADE不允许

-635

42915

删除规则不能有差异或者不能为SET NULL

-636

56016

在分区索引健的升序或降序规范中,分区所以必须与该规范一致

-637

42614

遇到重复的关键词

-638

42601

在CREATE TABLE语句中缺少列定义

-639

56027

带有SET NULL的删除规则的外健的可空列不能是分区索引的列

-640

56089

不能为这个表空间指定LOCKSIZE ROW,因为在该表空间中的表上定义了1型索引

-642

54021

唯一约束包含太多的列

-643

54024

检查约束超出了3800个字符的最大长度

-644

42615

在SQL语句中为关键词指定的值无效

-646

55017

在指定的分区表空间或者缺省表空间中不能创建表,因为指定的表空间已经包含了一个表

-647

57003

指定的缓冲池无效,因为他没有被激活

-650

56090

ALTER INDEX不能被执行;提供了原因代码

-651

54025

如果CREARE或ALTER TABLE被允许,表对象的描述词(object descriptor,OBD)将超过最大值(32KB)

-652

23506

遇到了EDITRPROC或VALIDPROC冲突

-653

57004

在分区表空间中的表不可用,因为分区索引尚未被创建

-655

56036

在卷的列表中,STOGROUP不能指定为特定的或不特定(“*”)的卷

-658

42917

当试图删除指定的对象时,无法删除该对象,该对象的删除必须通过删除与之相关联的对象完成

-660

53035

不正确的分区索引规范,必须为族索引定义有限制的关键字

-661

53036

分区索引没有指定恰当的分区数目

-662

53037

试图在未分区的表空间(分段的或简单的)上建立分区索引

-663

53038

为分区索引指定的关键字限制值是一个无效数字

-665

53039

为ALTER TABLESOACE语句指定了无效的PART语句

-666

57005

SQL语句不能被处理,因为指定的函数当前正处于进行过程中

-667

42917

不能明确的删除分区表空间的族索引,必须除去分区表空间来去掉分区索引

-668

56018

不能向用EDITPROC定义的表中添加列

-669

42917

不能显式的删除分区表空间中的表,必须删除分区表空间来删除表

-670

54010

表的记录长度超过了页面的大小

-671

53040

不能更改指定的表空间的缓冲池,因为这将改变表空间的页面大小

-672

55035

在命名的表上不允许DROP

-676

53041

只有4KB的缓冲池可被用于一个索引

-677

57011

缓冲池扩展失败,由于可用的虚拟内存的大小不足

-678

53045

为才分区索引中指定的限制健提供的值与数据类型不符

-679

57006

不能创建某一个特定对象,因为该对象的一个drop目前正在挂起

-680

54011

对DB2表不能超过750列

-681

23507

列违反了指定的FIELDPROC

-682

57010

不能载入FIELDPROC

-683

42842

列、单值类型、函数或者过程无效,因为不兼容语句。例如,指定的INTEGER具有FORBITDATA选项

-684

54012

指定的文字列表不能超过254个字节

-685

58002

FIELDPROC返回一个无效的域描述

-686

53043

用FIELDPROC定义的一个列不能与一个使用不同的FIELDPROC定义的列作比较

-687

53044

列不能与一个非兼容字段类型的列比较

-688

58002

返回不正确的数据

-689

54011

从属表定义了太多的列

-690

23508

数据定义的控制支持拒绝这个语句

-691

57018

命名的注册表不存在

-692

57018

命名的索引不存在,但命名的注册表需要该索引

-693

55003

命名的注册表/索引的命名列无效

-694

57023

DROP正在命名的注册表上挂起

-696

42898

由于相关的名字或者转换表的名字使用不正确,指定的触发器无效

-697

42899

FOR EACH语句被指定,因此与OLD合NEW相关的名字是不允许的,或者不能为一个BEFORE触发器指定OLD_TABLE和NEW_TABLE

-713

42815

指定的专用寄存器是无效的

-715

56064

命名的程序不能被运行,因为他依赖与你所安装的DB2版本的部件,但是你的数据中心没有安装这个部件

-716

56065

命名的程序使用这个版本的不正确的发行版本做了预编译

-717

56066

BIND失败,因为他依赖与你所安装的DB2版本的部件,但是你的数据中心没有安装这个部件

-718

56067

REBIND失败,因为IBMREQD列无效

-719

42710

不能BIND ADD一个已经存在的程序包

-720

42710

不能BIND REPLACE一个已经存在的程序包版本

-721

42710

程序包的一致性记号必须是独一无二的

-722

42704

绑定错误,因为指定的程序包不存在

-723

09000

一个触发的SQL语句接受到一个错误

-724

54038

达到了(16)级联间接的SQL语句的最大项目

-725

42721

对专门指定的寄存器提供了一个无效值

-726

55030

因为SYSPKSYSTEM条目,不能绑定这个程序包

-728

56080

指定的数据类型不能与私有协议发布一起使用

-729

429B1

用COMMIT ON RETURN定义的存储过程不能用作嵌套的CALL过程的目标

-730

56053

在只读的共享数据库中为表定义的参照完整性无效

-731

56054

VSAM数据集必须用SHAREOPTION(1.3)定义

-732

56055

被定义为只读型数据库却拥有没有定义空间或者索引空间的DB2子系统

-733

56056

只读共享数据库的定义不一致

-734

56057

一旦一个数据库被定义为ROSHARE READ,他将不能被更改为其他不同的ROSHARE状态

-735

55004

用DBID名称标识的数据库不再是一个只读共享数据库

-736

53014

命名的DBID无效

-737

53056

在这种状况下,不能建立一个隐含的表空间

-739

56088

因为同时指定了ALLOW PARALLEL和MODIELES SQL DATA这两个语句,因此已设定的函数将不能再被更改

-740

51034

在这种方式下不能用MODIELES SQL DATA定义指定的函数

-741

55030

已经为命名的共享组成员的数据定义了工作文件数据库

-742

53004

DSNDB07是隐含的工作文件数据库

-746

57053

在特定的触发器、存储过程或函数中的SQL语句违反嵌套SQL限制

-747

57054

指定的表是不可用的除非为LOB数据列建立起必须的辅助表

-748

54042

在指定的辅助表上已经有一个索引

-750

42986

不能对已指定的表重新命名,因为他至少在一个现存的视图或触发器中被引用

-751

42987

存储过程或用户自定义的函数试图执行一个不允许执行的SQL语句。DB2的线程被置于MUST_ROLLBACK状态

-752

0A001

无效CONNECT语句

-763

560A1

无效的表空间名

-764

560A2

LOB表空间必须与其相关的基表空间同在一个数据库中

-765

560A3

表和数据库不兼容

-766

560A4

不能对辅助表进行请求的操作

-767

42626

CREATE INDEX失败,因为在辅助表中为索引指定了列,或者因为没有为非辅助表的索引指定列

-768

560A50

不能为指定的列或者指定的分区建立辅助表,因为其辅助表已经存在

-769

53096

CREATE AUX TABLE的规格与基表不匹配

-770

530A6

指定的表必须有一个ROWID列,那么该表才可以包含一个LOB列

-771

428C7

无效的ROWID列规范

-797

42987

CREATE TRIGGER包含不被支持的语法

-798

428C9

不能把一个值插入到用GENERATED ALWAYS定义的ROWID列

-802

22012

某一特定操作发生了异常错误。被零除

 

22003

某一特定操作发生了异常错误。但不是被零除

-803

23505

不能插入行,因为这将违反唯一索引的约束

-804

07002

SQLDA的调用参数列表有误

-805

51002

在计划中没有发现DBRM或程序包名

-807

23509

对已指定的环境和连接,该程序包不可用

-808

08001

CONECT语句与程序中的第一个CONNECT语句不一致

-811

21000

当多行作为一内嵌的选择语句的返回结果是,必须使用游标

-812

22508

在CURRENT PACKAGESET中的ID集合是空白的,语句不能被执行

-815

42920

在一个内置选择语句或者一个基本谓词的子查询中,显式的或隐含的指定了GROUP BY或HAVING语句

-817

25000

执行SQL语句将可能导致禁止更新用户数据或DB2编目

-818

5103

计划<->载入组件的时间戳不匹配,在执行计划中没有从同一个预编译中建立DBRM,该预编译是作为组件载入的

-819

58004

视图不能重建,因为在DB2编目中存储的分析树长度为0

-820

58004

在这个DB2版本的DB2编目中遇到了无效值

-822

51004

在SQLDA中遇到了无效地址

-840

54004

在选择列表或插入列表中返回的项目太多

-842

08002

到指定位置的连接已经存在

-843

08003

SET CONNECTION或RELEASE语句无法执行,因为连接不存在

-870

58026

宿主变量描述符的个数不等于语句中宿主变量的个数

-872

51302

这个子系统已指定了有效的CCSID

-873

53090

同一SQL语句中,不能同时引用EBCDIC表中的定义的列和ASCII表中定义的列

-874

53901

指定对象的编码方案与其表空间的编码方案不匹配

-875

42988

指定的操作符不能用于ASCII数据

-876

53092

不能为指定的原因创建对象:提供了原因代码

-877

53093

数据库或表空间不允许用ASCII,必须使用EBCDIC

-878

53094

该PLAN——TABLE不能是ASCII,必须使用EBCDIC

-879

53095

指定对象的CREATE或ALTER语句不能将列、单值类型,某个存储过程或用户自定义函数的参数定义为以下类型:MAXED DATA,GRAPHIC,VARGRAPHIC,LONGVARGRAPHIC,因为系统没有为指定的编码方案定义相应的CCSID

-900

08003

应用处理没有连接到应用服务器,语句不能被执行

-901

58004

遇到时断时续的系统错误,该错误不能抑制后继的SQL语句的执行

-902

58005

内部控制块的指针错误,要求重新绑定

-904

57011

指定的资源不可用

-905

57014

超出了资源上限

-906

51005

因为重大错误,SQL语句无法执行

-908

23510

当前资源限制设施的规范或者自动重绑定的系统参数不允许BIND,REBIND,AUTOREBIND

-909

57007

对象已被删除

-910

57007

因为在该对象上挂起DROP,所以不能访问该对象

-911

40001

当前工作单元已被回滚

-913

57033

因为死锁或超时导致不成功执行

-917

42969

绑定程序包已经失败

-918

51021

SQL语句不能被执行,因为连接丢失

-919

56045

需要一个ROLLBACK

-922

42505

连接权限失败。试图从TSO、CICS或IMS访问DB2,同时相应的连接设施处于非活动的状态

-923

57015

因为DB2不可用,所以不能建立连接

-924

58006

遇到了DB2内部的连接错误:提供了原因代码

-925

2D521

SQL的COMMIT语句不能从CICS或IMS/TM发布

-926

2D521

SQL的ROLLBACK语句不能从CICS或IMS/TM发布

-927

51006

当正在连接的环境没有建立时,语言接口被调用。利用DSN命令激发该程序

-929

58002

数据获取退出已经失败(DPROP)

-939

51021

由于远程服务器的未请求的回滚,要求一个回滚

-947

56038

SQL语句失败,因为更新不能被传播(DPROP)

-948

56062

DDF没有启动,分布式操作无效

-950

42705

在SQL语句中指定的位置在SYSIBM.LOCATIONS中没有定义

-965

51021

存储过程非正常终止(在DB2 6之前的版本)

-981

57015

当前不是处于允许SQL的状态时,试图在RRSAF中执行SQL

-991

57015

调用连接不能建立一个到DB2的隐含或开放连接

-2001

53089

为储存过程指定的宿主变量参数的个数不等于预期的参数个数

-20003

560A7

不能为GRECP中的表空间或索引指定GBPCACHE NONE

-20004

560A8

对于WORKFILE对象。8KB或16Kb的缓冲池页面大小无效

-20005

54035

指定的对象类型超出了内部的ID极限

-20006

53097

当没有指定WLM环境时,LOB不能被指定为参数

-20070

53098

不能非LOB列建立一个辅助表

-20071

53099

必须指定WLM环境名

-20072

56052

指定的权限ID不拥有在触发器程序包上执行BIND所需的权限

-20073

42927

不能按照指定的要求更改命名的函数,因为在现存的视图定义中引用了该函数

-20074

42939

不能建立指定的对象,因为“SYS”是一个保留的前缀

-20100

56059

在被触发的SQL语句中有BIND错误,指定了错误的SQLCODE和SQLSTATE

-20101

56059

由于指定的原因代码,该函数失败

-20102

42849

在CREATE或ALTER FUNCTION语句中不能使用指定的选项

-20104

42856

更改一个CCSID失败

-20106

42945

不能改变表空间或数据库的CCSID,因为现存的试图引用

-30000

58008

DRDA分布协议错误;处理可以继续

-30002

57057

使用DRDA的分布式客户把OPEN语句连接到PREPARE,但PREPARE接受到一个SQLCODE为+495的警告

-30020

58009

DRDA分布协议错误;对话被解除

-30021

58010

DRDA分布协议错误;处理不能继续

-30030

58013

违反分布协议:COMMIT不成功,对话被解除(AS)

-30040

57012

因为不能得到资源,执行失败,处理可以继续(AS)

-30041

57013

因为不能得到资源,执行失败,处理不能成功的继续(AS)

-30050

58011

执行不成功,在BIND过程中不能执行语句

-30051

58012

特定的BIND过程不是处于活动状态(远程BIND),从而导致失败

-30052

42932

程序准备的假设错误

-30053

42506

程序包的拥有者遭遇授权失败

-30060

08004

RBD遭遇授权失败

-30061

08004

指定了无效或者没有存在的RDB

-30070

58014

目标子系统不支持这个命令

-30071

58015

目标子系统不支持这个对象

-30072

58016

目标子系统不支持这个参数

-30073

58017

目标子系统不支持这个参数值

-30074

58018

应答信息不被支持

-30080

08001

SNA通信错误

-30081

58019

TCP/IP通信错误

-30082

08001

由于安全冲突、通信失败:提供了原因代码

-30090

25000

指定的操作对远程执行失败

-30104

56095

在绑定选项与绑定值中有错误

-30105

56096

指定的绑定选项不兼容

 

 

 

计算时间值差timestampdiff(2,char(max(b.wf_time)-min(a.make_date)))

1 = 秒的小数部分   2 =    4 =    8 =    16 =    32 =    64 =   128 = 季度   256 = 年)

 

values(timestampdiff (2, chartimestamp('2010-11-30-00.00.00')-  timestamp('2002-11-08-00.00.00')))  )

 

 

 

将decimal类型转换为varchar类型和char类型

转换成char类型 cast(b.PROCESSINSTANCEID as char(19)

转换成varchar类型cast(cast(b.PROCESSINSTANCEID as char(19)) as varchar(300))

 

执行一个存储过程

例:CREATEPROCEDURE PUR_PROCESS_PRO()

Call PUR_PROCESS_PRO()

访问 select * from PUR_PROCESS

 

db2 oracle 存储过程对比

pl/sql 2009-12-10 10:10:13阅读17评论0字号:大中

1、创建PROCEDURE的参数的区别
         1
)参数类型和参数名称的位置不同
             db2
     CREATE PROCEDURE PRO1 (IN OrgID int)
             oracle
CREATE PROCEDURE PRO1 (OrgID IN int)
         2
)同时作为输入输出参数的写法不同
             db2
     CREATE PROCEDURE PRO1 (INOUT OrgID int)     INOUT连着写
             oracle
CREATE PROCEDURE PRO1 (OrgID IN OUT int)     IN OUT中间空格隔开,而且必须INOUT之前
         3
)没有输入或输出参数时
             db2
     CREATE PROCEDURE PRO1 ()     
             oracle
CREATE PROCEDURE PRO1 不能有空的括号
        4
)赋值语句写法不一样
            db2:     set var =..
           oracle:   var := ..
       5
)异常处理不一样
           db2:
异常处理器类型(handler-type)有以下几种:

CONTINUE 在处理器操作完成之后,会继续执行产生这个异常语句之后的下一条语句。
EXIT
在处理器操作完成之后,存储过程会终止,并将控制返回给调用者。
UNDO
在处理器操作执行之前,DB2会回滚存储过程中执行的SQL操作。在处理器操作完成之后,存储过程会终止,并将控制返回给调用者。
异常处理器可以处理基于特定SQLSTATE值的定制异常,或者处理预定义异常的类。预定义的3种异常如下所示:

NOT FOUND 标识导致SQLCODE值为+100或者SQLSATE值为02000的异常。这个异常通常在SELECT没有返回行的时候出现。
SQLEXCEPTIOIN
标识导致SQLCODE值为负的异常。
SQLWARNING
标识导致警告异常或者导致+100以外的SQLCODE正值的异常。
如果产生了NOT FOUND 或者SQLWARNING异常,并且没有为这个异常定义异常处理器,那么就会忽略这个异常,并且将控制流转向下一个语句。如果产生了 SQLEXCEPTION异常,并且没有为这个异常定义异常处理器,那么存储过程就会失败,并且会将控制流返回调用者。

以下示例声明了两个异常处理器。 EXIT处理器会在出现SQLEXCEPTION 或者SQLWARNING异常的时候被调用。EXIT处理器会在终止SQL程序之前,将名为stmt的变量设为"ABORTED",并且将控制流返回给调用者。UNDO处理器会将控制流返回给调用者之前,回滚存储过程体中已经完成的SQL操作。
oracle: EXCEPTION
   ----
错误处理
   WHEN DUP_VAL_ON_INDEX THEN
     ----
主键冲突
     ROLLBACK;

   WHEN VALUE_ERROR THEN
     ----
长度截断错误
     ROLLBACK;

   WHEN PROGRAM_ERROR THEN
     ----PL/SQL
内部错误
     ROLLBACK;

   WHEN TIMEOUT_ON_RESOURCE THEN
     ----
系统等待超时
       ROLLBACK;

   WHEN OTHERS THEN
     ----
其他异常错误
     ROLLBACK;
2
自定义函数例子
类似oracle to_date() 日期函数
CREATE FUNCTION DB2ADMIN.TO_DATE_EX
(INPUTDATE VARCHAR(20),
   FORMAT VARCHAR(20)
)
   RETURNS TIMESTAMP
   SPECIFIC DB2ADMIN.SQL060801174720700
   LANGUAGE SQL
   NOT DETERMINISTIC
   READS SQL DATA
   STATIC DISPATCH
   CALLED ON NULL INPUT
   EXTERNAL ACTION
   INHERIT SPECIAL REGISTERS
   RETURN
with tmp (outdate) as (
   select
      
case length(rtrim(INPUTDATE))
         when 10
           then timestamp(inputdate || ' 00:00:00')
         when 19
           then timestamp(inputdate)
       end
     from sysibm.sysdummy1 )
   select outdate
     from tmp;

 

 

 

DB2 values 技巧、sysibm.tables和syscat.tables、


1、 values 虚表

--最简单
Select * from (values 1) as a
--这是SQL很有用,可以做一些逻辑判断,如果加上where条件的话.
Select * from (values 1) as a where &num>0;
其中&num将用数值替换
.
--建个多字段的表

Select * from (values ('luzhaol@cn.ibm.com',1),('luoshuixin@126.com',2) ) as a(name,id)
可以用这种方法指定一些常量,用来left outer join.

2、

db2 => values 1

1
-----------
1

1 条记录已选择。


-- 获取系统当前日期
select current date from sysibm.sysdummy1;
select current time from sysibm.sysdummy1;
select current timestamp from sysibm.sysdummy1;
--sysibm.sysdummy1
表是一个特殊的内存中的表,用它可以发现如上面演示的 DB2 寄存器的值。您也可以使用关键字 VALUES 来对寄存器或表达式求值。
VALUES current date;
VALUES current time;
VALUES current timestamp;


3、 values 赋值

-- 给变量赋值的另一种方法
values expr1, expr2, expr3 into a, b, c;

-- 相当于
set a = expr1;
set b = expr2;
set c = expr3;


4

在 VALUES 子句中包含多行的内容。

例如,下面的语句将插入三行:INSERT INTO mytable VALUES (1, 'abc'), (2, 'def'), (3, 'ghi')


5

数据库的视图里有sysibm.tables和syscat.tables,这两个有什么区别?很多资料上不是说sysibm模式的是基表吗,怎么在视图里也有sysibm模式,是干什么用的?

sysibm.tables的表里面的信息比syscat.tables的少,或者说IBM认为你想知道的信息在sysibm.tables里面已经都可以知道了,这个应该是给用户使用的。syscat.tables应该是给系统使用的。

sysibm这个schema下的view,是对很多表的简化,可以直接查view来检索你感兴趣的资料。

 

 

Oracle 定时任务

文章分类:数据库

Oracle 定时任务

begin
  sys.dbms_job.submit(job => :job,
                      what => 'create_tomorrow_raw_table;
drop_old_raw_table;',
                      next_date => to_date('26-04-2008 10:02:01', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'sysdate+1');
  commit;
end;

 

abs(m)   m的绝对值
mod(m,n) m被n除后的余数

power(m,n) m的n次方

round(m[,n]) m四舍五入至小数点后n位的值(n缺省为0)

trunc(m[,n]) m截断n位小数位的值(n缺省为0)


avg([distinct/all] n) 列n的平均值
count([all] *)   返回查询范围内的行数包括重复值和空值

count([distinct/all] n) 非空值的行数

max([distinct/all] n) 该列或表达式的最大值

min([distinct/all] n) 该列或表达式的最小值

stdev([distinct/all] n) 该列或表达式的标准偏差,忽略空值

sum([distinct/all] n) 该列或表达式的总和

variance([distinct/all] n) 该列或表达式的方差,忽略空值


Oracle
日期函数2008-11-13 10:48DELIVERED_DATE >= to_date('2008-09-07','yyyy-mm-dd') and DELIVERED_DATE < to_date('2008-09-08','yyyy-mm-dd')
日期函数:
> add_months(d,n)  
日期d加n个月
last_day(d)  
包含d的月份的最后一天的日期
month_between(d,e)
日期d与e之间的月份数,e先于
dnew_time(d,a,b)  
a时区的日期和时间d在b时区的日期和时间
next_day(d,day)  
比日期d晚,由day指定的周几的日期
sysdate  
当前的系统日期和时间
greatest(d1,d2,...dn)
给出的日期列表中最后的日期
least(d1,k2,...dn)
给出的日期列表中最早的日期
to_char(d [,fmt])
日期d按fmt指定的格式转变成字符串
to_date(st [,fmt])
字符串st按fmt指定的格式转成日期值,若fmt忽略,st要用缺省格式
round(d [,fmt])  
日期d按fmt指定格式舍入到最近的日期trunc(d [,fmt])  

1.下一个周五的日期select next_day(sysdate,6) from test;
2.两个月前的今天的日期
select add_months(sysdate,-2) from test;
 
initcap(st) 返回st将每个单词的首字母大写,所有其他字母小写

lower(st) 返回st将每个单词的字母全部小写

upper(st) 返回st将每个单词的字母全部大写

concat(st1,st2)   返回st为st2接st1的末尾(可用操作符"||")

lpad(st1,n[,st2]) 返回右对齐的st,st为在st1的左边用st2填充直至长度为n,st2的缺省为空格

rpad(st1,n[,st2]) 返回左对齐的st,st为在st1的右边用st2填充直至长度为n,st2的缺省为空格

ltrim(st[,set])   返回st,st为从左边删除set中字符直到第一个不是set中的字符。缺省时,指的是空格

rtrim(st[,set])   返回st,st为从右边删除set中字符直到第一个不是set中的字符。缺省时,指的是空格

replace(st,search_st[,replace_st]) 将每次在st中出现的search_st用replace_st替换,返回一个st。缺省时,删除
search_st
substr(st,m[,n]) n=返回st串的子串,从m位置开始,取n个字符长。缺省时,一直返回到st末端

length(st) 数值,返回st中的字符数

instr(st1,st2[,m[,n]])   数值,返回st1从第m字符开始,st2第n次出现的位置,m及n的缺省值为
1
例:

1.
select initcap('THOMAS'),initcap('thomas') from test;
initca initca
------ ------
Thomas Thomas
2.
select concat('abc','def') "first" from test;
first
-----
abcdef
3.
select 'abc'||' '||'def' "first" from test;
first
-----
abc def
4.
select lpad(name,10),rpad(name,5,'*') from test;
lpad(name,10) rpad(name,5,'*')
------------ ----------------
          mmx mmx**
       abcdef abcde
5.
去掉地址字段末端的点及单词st和
rd
select rtrim(address,'. st rd') from test
6.
select name,replace(name,'a','*') from test;
name   replace(name,'a','*')
----   ---------------------
great gre*t
7.
select substr('archibald bearisol',6,9) a,substr('archibald bearisol',11) b from test;
a          b
-------    -------
bald bear bearisol
8.
select name,instr(name,' ') a,instr(name,' ',1,2) b from test;
name     a         b
------- -------- ---------
li lei   3         0
l i l    2         4

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

转换函数:
nvl(m,n) 如果m值为null,返回n,否则返回
m
to_char(m[,fmt]) m从一个数值转换为指定格式的字符串fmt缺省时,fmt值的宽度正好能容纳所有的有效数字

to_number(st[,fmt]) st从字符型数据转换成按指定格式的数值,缺省时数值格式串的大小正好为整个数

附:

to_char()函数的格式:

---------------------------------
符号     说明

---------------------------------
9        每个9代表结果中的一位数字

0        代表要显示的先导
0
$        美元符号打印在数的左边

L        任意的当地货币符号

.        打印十进制的小数点

,        打印代表千分位的逗号

---------------------------------
例:

1.
select to_number('123.45')+to_number('234.56') form test;
to_number('123.45')+to_number('234.56')
----------------------------------------
                                358.01
2.
select to_char(987654321) from test;
to_char(987654321)
------------------
987654321
3.
select to_char(123,'$9,999,999') a,to_char(54321,'$9,999,999') b,to_char(9874321,'$9,999,999') c from test;

2010-01-17

缩略显示

工作中用到的SQL

文章分类:数据库

alter table tbmoudule drop column imouduleID; --删除列 mysql
select coalesce(col,0) ,value(col,'0')  from   tbl;--为null赋默认值
db2
alter table SJPT_SFSL add column flag int default 0
CREATE INDEX SJPT_SFSL_flag    ON SJPT_SFSL(flag);
取得当前年月日:

SELECT current date FROM sysibm.sysdummy1
取得当前时分秒:
SELECT current time FROM sysibm.sysdummy1
取得当前年月日时分秒:
SELECT current timestamp FROM sysibm.sysdummy1
取得3个月前的日期
SELECT current date - 3 month FROM sysibm.sysdummy1
取得3天前的日期
SELECT current date - 3 day FROM sysibm.sysdummy1
call
存储过程名称();
alter session force parallel query parallel 4;ora并行处理就是为了将一个SQL语句分布到多个CPU上去执行

一亿条数据不算太大,如果你的表不是提供7*24联机服务,则可以参考如下步骤
1.CREATE TABLE NEW_TABLE PARALLEL X AS SELECT * FROM OLD_TABLE WHERE 1=2
2.ALTER TABLE NEW_TABLE NOLOGGING
3.
alter session force parallel ddl parallel x;
alter session force parallel dml parallel x;
alter session force parallel query parallel x;
insert /*+ append parallel(new_table,x) */ into new_table as
select xxx,nvl(a,-1),nvl(b,-1),nvl(c,-1),nvl(d,-1),xxx from old_table

2010-01-17

缩略显示

DB2自定义java函数

文章分类:数据库

我们知道,在DB2中提供的函数有限.在笔者的实际工作中就遇到了这个问题.所以我们在用到DB2的项目中,很多时候需要自己定义函数.好在DB2也提供了自定义函数的功能.
下面笔者就某个项目来说
.
用java来实现DB2自定义函数,首先要写出函数的java实现代码

import COM.ibm.db2.app.*;

public class DB2Udf extends UDF
{

/**
*
*/
public DB2Udf()
{
}

/**
* 返回两个数值的按位与操作结果

* @param num1
* @param num2
* @return int
*/
public static int bitand(int num1,int num2)
{
return num1&num2;
}
}

编译之,要注意的地方是一定要用DB2自带的jdk来进行编译.
然后把这个class文件放到DB2安装路径下\sqllib\function下

然后再到DB2的客户端声明这个自定义函数就可以用了
--两个整形数字的按位与

drop function bitand;
create function bitand(value1 int,value2 int)
returns integer
fenced
variant
no sql
language java
parameter style java
external name 'DB2Udf!bitand';

2010-01-17

缩略显示

db2基础语句

文章分类:数据库

1. 建立数据库DB2_GCB

CREATE DATABASE DB2_GCB ON G: ALIAS DB2_GCB

USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM DFT_EXTENT_SZ 32

2. 连接数据库

connect to sample1 user db2admin using 8301206

3. 建立别名

create alias db2admin.tables for sysstat.tables;

CREATE ALIAS DB2ADMIN.VIEWS FOR SYSCAT.VIEWS

create alias db2admin.columns for syscat.columns;

create alias guest.columns for syscat.columns;

4. 建立表

create table zjt_tables as

(select * from tables) definition only;

create table zjt_views as

(select * from views) definition only;

5. 插入记录

insert into zjt_tables select * from tables;

insert into zjt_views select * from views;

6. 建立视图

create view V_zjt_tables as select tabschema,tabname from zjt_tables;

7. 建立触发器

CREATE TRIGGER zjt_tables_del

AFTER DELETE ON zjt_tables

REFERENCING OLD AS O

FOR EACH ROW MODE DB2SQL

Insert into zjt_tables1 values(substr(o.tabschema,1,8),substr(o.tabname,1,10))

8. 建立唯一性索引

CREATE UNIQUE INDEX I_ztables_tabname

[size=3]ON zjt_tables(tabname);

9. 查看表

select tabname from tables

where tabname='ZJT_TABLES';

10. 查看列

select SUBSTR(COLNAME,1,20) as 列名,TYPENAME as 类型,LENGTH as 长度

from columns

where tabname='ZJT_TABLES';

11. 查看表结构

db2 describe table user1.department

db2 describe select * from user.tables

12. 查看表的索引

db2 describe indexes for table user1.department

13. 查看视图

select viewname from views

where viewname='V_ZJT_TABLES';

14. 查看索引

select indname from indexes

where indname='I_ZTABLES_TABNAME';

15. 查看存贮过程

SELECT SUBSTR(PROCSCHEMA,1,15),SUBSTR(PROCNAME,1,15)

FROM SYSCAT.PROCEDURES;

16. 类型转换(cast)

ip datatype:varchar

select cast(ip as integer)+50 from log_comm_failed

17. 重新连接

connect reset

18. 中断数据库连接

disconnect db2_gcb

19. view application

LIST APPLICATION;

20. kill application

FORCE APPLICATION(0);

db2 force applications all (强迫所有应用程序从数据库断开)

21. lock table

lock table test in exclusive mode

22. 共享

lock table test in share mode

23. 显示当前用户所有表

list tables

24. 列出所有的系统表

list tables for system

25. 显示当前活动数据库

list active databases

26. 查看命令选项

list command options

27. 系统数据库目录

LIST DATABASE DIRECTORY

28. 表空间

list tablespaces

29. 表空间容器

LIST TABLESPACE CONTAINERS FOR

Example: LIST TABLESPACE CONTAINERS FOR 1

30. 显示用户数据库的存取权限

GET AUTHORIZATIONS

31. 启动实例

 

DB2START

32. 停止实例

db2stop

33. 表或视图特权

grant select,delete,insert,update on tables to user

grant all on tables to user WITH GRANT OPTION

34. 程序包特权

GRANT EXECUTE

ON PACKAGE PACKAGE-name

TO PUBLIC

35. 模式特权

GRANT CREATEIN ON SCHEMA SCHEMA-name TO USER

36. 数据库特权

grant connect,createtab,dbadm on database to user

37. 索引特权

grant control on index index-name to user

38. 信息帮助 (? XXXnnnnn )

例:? SQL30081

39. SQL 帮助(说明 SQL 语句的语法)

help statement

例如,help SELECT

40. SQLSTATE 帮助(说明 SQL 的状态和类别代码)

? sqlstate 或 ? class-code

41. 更改与"管理服务器"相关的口令

db2admin setid username password

42. 创建 SAMPLE 数据库

db2sampl

db2sampl F:(指定安装盘)

43. 使用操作系统命令

! dir

44. 转换数据类型 (cast)

SELECT EMPNO, CAST(RESUME AS VARCHAR(370))

FROM EMP_RESUME

WHERE RESUME_FORMAT = 'ascii'

45. UDF

要运行 DB2 Java 存储过程或 UDF,还需要更新服务器上的 DB2 数据库管理程序配置,以包括在该机器上安装 JDK 的路径

db2 update dbm cfg using JDK11_PATH d:sqllibjavajdk

TERMINATE

update dbm cfg using SPM_NAME sample

46. 检查 DB2 数据库管理程序配置

db2 get dbm cfg

47. 检索具有特权的所有授权名

SELECT DISTINCT GRANTEE, GRANTEETYPE, 'DATABASE' FROM SYSCAT.DBAUTH

UNION

SELECT DISTINCT GRANTEE, GRANTEETYPE, 'TABLE ' FROM SYSCAT.TABAUTH

UNION

SELECT DISTINCT GRANTEE, GRANTEETYPE, 'PACKAGE ' FROM SYSCAT.PACKAGEAUTH

UNION

SELECT DISTINCT GRANTEE, GRANTEETYPE, 'INDEX ' FROM SYSCAT.INDEXAUTH

UNION

SELECT DISTINCT GRANTEE, GRANTEETYPE, 'COLUMN ' FROM SYSCAT.COLAUTH

UNION

SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SCHEMA ' FROM SYSCAT.SCHEMAAUTH

UNION

SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SERVER ' FROM SYSCAT.PASSTHRUAUTH

ORDER BY GRANTEE, GRANTEETYPE, 3

create table yhdab

(id varchar(10),

password varchar(10),

ywlx varchar(10),

kh varchar(10));

create table ywlbb

(ywlbbh varchar(8),

ywmc varchar(60))

48. 修改表结构

alter table yhdab ALTER kh SET DATA TYPE varchar(13);

alter table yhdab ALTER ID SET DATA TYPE varchar(13);

alter table lst_bsi alter bsi_money set data type int;

 


说明 目录视图
检查约束
SYSCAT.CHECKS
SYSCAT.COLUMNS
检查约束引用的列
SYSCAT.COLCHECKS
关键字中使用的列
SYSCAT.KEYCOLUSE
数据类型
SYSCAT.DATATYPES
函数参数或函数结果
SYSCAT.FUNCPARMS
参考约束
SYSCAT.REFERENCES
模式
SYSCAT.SCHEMATA
表约束
SYSCAT.TABCONST
SYSCAT.TABLES
触发器
SYSCAT.TRIGGERS
用户定义函数
SYSCAT.FUNCTIONS
视图 SYSCAT.VIEWS

2010-01-17

缩略显示

DB2错误汇总

文章分类:数据库

操作数据库过程中,遇到许多问题,很多都与SQL CODE和SQL State相关,现在把一个完整的SQLCODE和SQLState错误信息和相关解释作以下说明,一来可以自己参考,对DB2错误自行找出原因
(声明:这是搜集网上的资料得来的,详细出处不记得了)

sqlcode sqlstate 说明

000 00000 SQL语句成功完成

01xxx SQL语句成功完成,但是有警告

+012 01545 未限定的列名被解释为一个有相互关系的引用

+098 01568 动态SQL语句用分号结束

+100 02000 没有找到满足SQL语句的行

+110 01561 用DATA CAPTURE定义的表的更新操作不能发送到原来的子系统

+111 01590 为2型索引设置了SUBPAGES语句

+117 01525 要插入的值的个数不等于被插入表的列数

+162 01514 指定的表空间被置为检查挂起状态

+203 01552 使用非唯一的名字来解决命名的限定列

+204 01532 命名的对象未在DB2中定义

+206 01533 命名的列不在SQL语句中指定的任何表中存在

+218 01537 因为SQL语句引用一个远程对象,不能为该SQL语句执行
EXPLAIN
+219 01532 命名的PLAN TABLE不存在

+220 01546 不正确定义PLAN TABLE,检查命名列的定义

+236 01005 SQLDA中的SQLN的值至少应于所描述的列的个数一样大

+237 01594 至少有一个被描述的列应该是单值类型,因此扩展的SQLVAR条目需要另外的空间

+238 01005 至少应有一个被描述的列是一个LOB,因此扩展的SQLVAR条目需要另外的空间

+239 01005 至少应有一个被描述的列应是单值类型,因此扩展的SQLVAR条目需要另外的空间

+304 01515 该值不能被分配给宿主变量,因为该值不再数据类型的范围之内

+331 01520 不能被翻译的字符串,因此被设置为
NULL
+339 01569 由于与DB2 2.2版本的子系统连接,所以可能存在字符转换问题

+394 01629 使用优化提示来选择访问路径

+395 01628 设置了无效的优化提示,原因代码指定了为什么,忽略优化提示

+402 01521 未知的位置

+403 01522 本地不存在CREAT ALIAS对象

+434 01608 在DB2未来发布的版本中将不支持指定的特性,IBM建议你停止使用这些特性

+445 01004 值被CAST函数截取

+462 01Hxx 由用户定义的函数或存储过程发出的警告

+464 01609 命名的存储过程超出了它可能返回的查询结果集的个数限制

+466 01610 指定由命名的存储过程返回的查询结果集的个数。成功完成

+494 01614 由存储过程返回的结果集的个数超过了由ASSOCIATE LOCATORS语句指定的结果集定位器的个数

+495 01616 因为倒台SQL的成本估算超出了在ELST中指定的警告阀值,所以发出警告

+535 01591 请求一个主健的定位更新,或请求一个使用自我引出约束的表的删除操作

+541 01543 命名外健是一个重复的引用约束

+551 01548 命名的授权ID缺少在命名的DB2对象上执行命名操作的权限

+552 01542 命名的授权ID缺少执行命名操作的权限

+558 01516 已经被授权该PUBLIC,因此WITH GRANT OPTION不可用

+561 01523 对ALTER REFERENCES INDEX 和TRIGGER特权,PUBLIC AT ALL LOCATION无效

+562 01560 因为GRANTEE已经拥有这些特权,所以一个或更多的特权被忽略

+585 01625 模式名指定了不止一次

+599 01596 没有为长字符数据类型(BLOB,CLOB和DBCLOB)建立比较函数

+610 01566 由于建立了一个指定为DEFER YES的索引,指定的对象处于PENDING状态,或者因为使用了

ALTER INDEX改变关键值的范围,所以指定的对象处于PENDING状态
+625 01518 因为删除了主健索引,所以表定义被标注为不完整

+626 01529 删除了加强UNIQUE约束的索引,唯一性不在被加强

+645 01528 因为建立的索引中没有包含NULL,所以WHERE NOT NULL被忽略

+650 01538 不能更改或者建立已命名的表为从属表

+653 01551 在已指定的分区表空间中尚没有建立指定的分区索引,所以分区索引不可得

+655 01597 为CREATE或ALTER STOGROUP语句指定特定或者非特定的卷ID,在DB2较新发布的版本中(版本6

以后)将不再支持他们
+658 01600 当建立目录索引时,不能指定SUBPAGES语句,SUBPAGES将被忽略,并缺省为
1
+664 01540 分区索引的限制关键字超出了最大值

+738 01530 已命名的对象的更改可能像只读系统中对象的改变要求一样

+799 0157 SET语句中引用的特定寄存器不存在,将忽略 SET请求

+802 01519 数据溢出或者因除法异常而引起的数据异常错误

+806 01553 ISOLATION(RR)与LOCKSIZE PAGE 冲突

+807 01554 由于十进制乘法导致溢出

+863 01539 连接成功,但是只支持
SBCS
+2000 56094 SUBPAGES不等于1的1型索引不能成为数据共享环境中的缓冲池组依赖者

+2002 01624 因为指定的缓冲池不允许超高速缓存,GNPCACHE指定被忽略

+2007 01602 因为DB2子系统的参数禁用“提示(hiats)”所以不能指定优化提示

+30100 01558 分布式协议错误被检测到,提供原来的SQLCODE和
SQLSTATE
-007 42601 SQL语句中由非法字符

-010 42603 字符串常量非正常终止;检查到有遗漏的引号标志

-029 42601 需要INTO语句

-060 42815 某特定数据类型的长度或者标量规范无效

-084 42612 不能执行SQL语句,因为该语句对动态SQL无效或者对OS/390的DB2无效

-097 42601 在单位类型、用户自定义的函数以及过程中不能使用带有CAST的LONG VARCHAR或

LONGVARGRAPHIC
-101 54001 SQL语句超出了已确定的DB2限制:例如,表的数目太多,语句中的字节太多

-102 54002 字符串常量太长

-103 42604 无效数学文字

-104 42601 SQL语句中遇到非法符号

-105 42604 无效的字符串格式;通常引用一个格式不正确的图形字符串

-107 42622 对象名太长

-108 42601 RENAME语句中指定的名字有错误,不能使用限定词

-109 42601 指定了无效语句;例如CREATE VIEW不能包含ORDER BY 语句

-110 42606 遇到了无效的十六进制的文字

-111 42901 指定的列函数没有给出列名

-112 42607 无效的列函数语法;列函数不能运行与其他的列函数之上

-113 42602 遇到无效字符

-114 42961 该语句的位置名称必须与当前服务器匹配,但是却没有匹配

-115 42601 因为比较运算符没有伴着一个表达式或者列表,遇到了无效谓词

-117 42802 待插入的数值的个数于被插入的行中的列数不相等

-118 42902 数据修改语句(UPDATE或DELETE)和FROM语句中的表和视图命名不合法

-119 42803 HAVING语句中的列的列表与GROUP BY语句中的列列表不匹配

-120 42903 不允许WHERE语句、SET语句、VALUES语句或者SET ASSIGNMENT语句引用列函数

-121 42701 在INSERT或UPDATE语句中,某一列被非法引用了两次

-122 42803 非法使用了列函数。因为没有用于一个列函数的所有列不再GROUP BY语句中

-123 42601 特定位置的参数必须是一个常数或者一个关键词

-125 42805 ORDERBY语句中指定了无效数字,该数字要么小于1要么大于选定的列数

-126 42829 不能为一个UPDATE语句指定ORDER BY语句

-127 42905 在子选择中DISTINCT只能指定一次

-128 42601 SQL谓词中NULL使用不当

-129 54004 SQL语句中包含的表多于15个

-130 22019 ESCAPE语句必须为一个字符

22025 无效的ESCAPE模式

-131 42818 LIKE谓词只能用于字符数据

-132 42824 LIKE语句、ESCAPE语句、LOCATE函数或POSSTR函数中有无效运算对象

-133 42906 无效相关子查询引用

-134 42907 大于255字节的列被不正确使用

-136 54005 排序关键字的长度大于4000字节

-137 54006 被连接的字符串太大;字符的最大值为32767;图形的最大值为
16382
-138 22011 SUBSTR列函数的第二个或第三个操作符无效

-142 42612 不支持的SQL语句。该语句可能在另外的RDBMS上有效,也有可能在其他的上下文中有效(例

如,VALUES只能在触发器中出现)
-144 58003 指定的段号无效

-147 42809 某一源函数不能更改。要改变源函数,必须删除该源函数并重新建立他

-148 42809 RENAME和ALTER无法执行。RENAME不能对视图或者活动RI.ST表重新命名。ALTER不能用于改变列的长度,因为该列参与了RI、

一个用户退出程序、全局的临时表或打开DATACAPTURE CHANGES表的列
-150 42807 触发活动的INSERT,UPDATE或DELETE语句中指定了无效的视图更新或一个无效的转换表

-151 42808 试图更新一个不可更新的视图的列、一个DB2 CATALOG表的列或者一个ROWID列

-152 42809 DROP CHECK试图删除一个参照约束,或者DROP FOREIGN试图删除一个检查约束

-153 42908 无效的视图建立请求,必须为旋转列表中列出的列出的未命名的列或者重复的列提供一个名字

-154 42909 不能用UNION、UNION ALL或者一个远程表建立视图

-156 42809 在视图上建立索引是非法的,或者在ALTER TABLE,CREATE TRIGGER,DROP TABLE或LOCKTABLE

语句上指定一个不是表的其他对象这是无效的
-157 42810 必须在FOREIGN KEY语句中指定一个表名

-158 42811 视图的列和选择列表中的列不相匹配

-159 42089 无效DROP或COMMENT ON语句

-160 42813 对该视图的WITH CHECK OPTION无效

-161 44000 正被更新的视图WITH CHECK OPTION语句使得这行不能被插入或更新

-164 42502 用户没有建立这个视图的权限

-170 42605 标量函数指定了无效的参数个数

-171 42815 标量函数指定了无效的数据类型长度或者无效数值

-173 42801 在非只读型的游标上不能指定隔离级别
UR
-180 22007 DATE、TIME、TIMESTAMP值的字符串表示法的语法不对

-181 22001 不是有效的DATE、TIME、TIMESTAMP值

-182 42816 在算术表达式中的日期/时间值无效

-183 22008 在算术表达式中返回的日期/时间值的结果不在有效值的范围内

-184 42610 没有正确使用日期/时间值的参数标记

-185 57008 没有定义本定的日期/时间出口

-186 22505 改变本定的日期/时间出口引发这个程序的长度无效
-187 22506 MVS返回无效的当前日期/时间

-188 22503 字符串表示无效

-189 22522 指定的编码字符集的ID无效或没有定义

-190 42837 不能象所设定的那样改变(ALTER)列。只能改变(ALTER)VARCHAR列的长度

-191 22504 字符串中包含了无效的混合数据

-197 42877 当两个或多个表被联合在一起排序时,限定的列名不能在ORDER BY语句中使用

-198 42617 试图对空的字符串发布一个PREPARE或EXECUTE IMMEDIATE语句

-199 42601 SQL语句中使用了非法关键词

-203 42702 模糊列引用

-204 42704 没有定义的对象名

-205 42703 指定的表的列名无效

-206 42703 列名没有在FROM语句所引用的任何表中,或者没有在定义触发器所在的表中

-208 42707 不能ORDER BY指定列,应为该列不在选择列表中

-212 42712 指定的表名在触发器中不允许多次使用,只能使用一次

-214 42822 DISTINCT、ORDER BY 引起的无效表达式

-219 42704 因为PLAN_TABLE不存在,EXPLAIN无法执行

-220 55002 遇到无效的PLAN_TABLE列

-221 55002 如果为PLAN_TABLE定义了可供选择的列,那么,必须定义所有的列

-229 42708 指定的现场找不到

-240 428B4 LOCK TABLE语句的PART子句无效

-250 42718 没有定义本地位置名

-251 42602 记号无效

-300 22024 宿主变量或参数中的字符串不是以NULL为终止

-301 42895 无效的宿主变量数据类型

-302 22001 输入的变量值对指定的列无效

-302 22003 输入的变量值对指定的列而言太大
-303 42806 因为数据类型不兼容,不能分配数值

-304 22003 因为数据超出了范围,不能分配数值

-305 22002 没有NULL指示符变量

-309 22512 因为引用的宿主变量被设置成NULL,所以谓词无效

-310 22501 十进制的宿主变量或参数包含非十进制数据

-311 22501 输入的宿主变量长度无效,或者时负值或者太大

-312 42618 没有定义宿主变量或者宿主变量不可用

-313 07001 宿主变量的个数不等于参数标识的个数

-314 42714 模糊的宿主变量引用

-327 22525 在最后分区的关键字范围内,不能插入行

-330 22021 不能成功的翻译字符串

-331 22021 字符串不能分配到宿主变量,因为其不能成功的被翻译

-332 57017 不能为两个命名的编码字符集的ID定义翻译规则

-333 56010 子类型无效导致翻译失败

-338 42972 ON语句无效,必须引用连接的列

-339 56082 访问DB2 2.2版本的子系统被拒绝,原因时ASCII到EBCDIC翻译不能进行

-350 42962 无效的大对象规范

-351 56084 SELECT列表中有不支持的数据类型

-352 56084 输入列表中有不支持的数据类型

-355 42993 LOB列太大,以至不能被记录在日志中

-372 428C1 每个表只允许有一个ROWID列

-390 42887 在上下文中指定的函数无效

-392 42855 自从前一次FETCH以来,指定游标的SQLDA已被不恰当的改变

-396 38505 在最后的访问过程中,视图执行SQL语句

-397 428D3 在某一列上不恰当的指定了GENERATED因为该列不是ROWID数据类型

-398 428D2 为某一个宿主变量请求LOCATOR,但是该宿主变量不是一个
LOB
-399 22511 在INSERT语句中为ROWID列指定的值无效

-400 54027 在DB2编目中定义的用户自定义索引不能超过100个

-401 42818 算术操作符或比较操作符的操作对象不是兼容的

-402 42819 算术函数不能用于字符或日期时间数据

-404 22001 SQL语句指定的字符串太长

-405 42820 数值文字超出了范围

-406 22003 计算出的或者倒出的数值超出了范围

-407 23502 不能把NULL值插到定义为NOT NULL的列中

-408 42821 数值不能被更新或插入,因为他与列的数据类型不兼容

-409 42607 COUNT函数指定的运算对象无效

-410 42820 浮点文字笔30个字符的最大允许长度长

-411 56040 CURRENT SQLID使用无效

-412 42823 在子查询的选择列表中遇到了多个列

-413 22003 当转换为一个数字型数据类型时,数据溢出

-414 42824 LIKE谓词不能运行于用数字或日期时间类型定义的列

-415 42825 为UNION操作指定的选择列表不是联合兼容的

-416 42907 包含UNION操作符的SQL语句不允许有长的字符串列

-417 42609 两参数标识符作为运算对象被指定在同一谓词的两边

-418 42610 参数标识符使用无效

-419 42911 十进制除法无效

-420 22018 字符串自变量值不符合函数的要求

-421 42826 UNION操作的选择列表中没有提供相同数目的列

-423 0F001 为LOB或结果集定位器指定的值无效

-426 2D528 在不允许更新的应用服务器不允许执行COMMIT语句

-427 2D529 在不允许更新的应用服务器不允许执行ROLLBACK语句

-430 38503 在用户自定义的函数或存储过程中遇到了错误

-433 22001 指定的值太长

-435 428B3 无效的应用定义的
SQLSTATE
-438 xxxxx 使用了RAISE_ERROR函数的应用发出了一个错误

-440 42884 存储过程或用户自定义函数的参数列表参数个数于预期的个数不匹配

-441 42601 与标量函数一起使用DISTINCT或ALL是不正确的用法

-443 42601 指定的外部函数返回错误的
SQLSTATE
-444 42724 与被称为存储过程或用户自定义函数有关的程序不能找到

-449 42878 对存储过程或用户自定义的函数,CREATE或ALTER语句不正确(缺失EXTERNAL NAME 子句
)
-450 39501 存储过程或用户自定义函数写入存储器的值超过了参数声明的长度

-451 42815 CREATE FUNCTION中指定了不正确的数据类型

-453 42880 用户自定义函数中的RETURNS语句无效

-454 42723 指定的函数识别标记与已存在的另一函数的识别标记冲突

-455 42882 模式名不比配

-456 42710 为用户自定义函数指定的函数名已经存在

-457 42939 用户自定义函数或用户自定义类型正试图使用系统中定义的函数或者类型所用的名称

-458 42883 没有找到函数

-463 39001 特定的外部例程返回无效的
SQLSTATE
-469 42886 参数定义为OUT或INOUT的CALL语句必须提供宿主变量

-470 39002 指定了NULL参数,但是该例程却不支持
NULL
-471 55023 存储过程或用户自定义函数失败:提供原因代码

-472 24517 外部的函数程序使游标处于打开状态

-473 42918 用户自定义数据类型命名不能和系统定义的数据类型一样

-475 42866 结果类型不能被转换成RETURNS类型

-476 42725 在其模式中该函数不是独一无二的

-478 42893 不能DROP或REVOKE特定的对象,因为其他对象依赖于该对象

-480 51030 直到存储过程已经被CALL后,DESCRIBE PROCEDURE和ASSOCIATE LOCATORS才能被发布

-482 51030 存储过程不返回到任何一个定位器

-483 42885 CREATE FUNCTION语句中的参数个数与源函数中的参数个数不匹配

-487 38001 选择了NO SQL选项建立指定的存储过程或用户自定义函数,但却视图发布SQL语句

-491 42601 CREATE FUNCTION语句无效,因为该语句没有RETURNS语句或者因为该语句没有指定有效的SOURCE或者EXTERNAL语句

-492 42879 指定函数的指定参数的个数有错误

-495 57051 语句的估计处理器成本超出了资源限制

-496 51033 语句无法执行,因为当前服务器与调用存储过程的服务器不同

-497 54041 指定的数据库超过了32767 OBID的上限,或者CREATE DATABASE语句使之达到了32511DBID的上限

-499 24516 指定的游标已被分配到结果集,该结果集来自已经指定的存储过程

-500 24501 因为连接被破坏,WITH HOLD游标被关闭

-501 24501 在试图获取数据或关闭一个游标前必须打开一个游标

-502 24502 在没有关闭游标前不能再次打开游标

-503 42912 因为列在游标的FOR UPDATE OF语句中没有被指定,该游标用于获取该列,所以不能更新该列

-504 34000 不能引用一个游标,因为他不是定义到程序里的

-507 24501 在试图更新或者删除WHERE CURRENT OF前,必须打开游标

-508 24504 因为被引用的游标当前不是处于数据行上,所以不能被更新或删除

-509 42827 除了在游标上指定的那个表(该表由WHERE CURRENT OF语句引用的)以外,再也不能从别的表上更新数据

-510 42828 表或视图不能被修改

-511 42829 对不可修改的表或视图,FOR UPDATE OF语句无效

-512 56023 对远程对象的无效引用

-513 42924 一个别名不能再被定义成另外的别名

-514 26501 游标尚没有被准备

-516 26501 试图描述未准备好的SQL语句

-517 07005 因为SQL语句尚没有准备好,游标无效

-518 07003 试图执行尚没有准备好的SQL语句

-519 24506 当为游标的SQL语句发布一个准备语句是,游标不能是打开的

-525 51015 不能在已指定的程序包中执行SQL语句,因为在绑定时间内该程序包无效

-526 42995 在给定的上下文中,不能使用全局的临时表

-530 23503 对特定的约束名指定了无效的外健值

-531 23504 从版本5开始,父关键字的多行更新将试图删除一个外关键字依赖的父关键字值,在版本5以前,当引用主关键值外健值当前 存在时,试图更新该主健值

-532 23504 删除操作违反了已指定的参照约束

-533 21501 多行插入无效,试图将多行插到自我引用的表中

-534 21502 可改变主健列值的更新语句不能在同一时刻用于更新多行

-535 21502 当从自我引用表中删除数据或者更新主健列时,不能指定WHERE CURRENT OF。不是版本5的子系统才调用该代码

-536 42914 因为某一特定表的参照约束存在,所以删除语句无效

-537 42709 在外健语句或主健语句的规范中,每个列的出现不能多于一次

-538 42830 无效的外健;不符合引用的表没有主健

-539 42888 不能定义外健,因为被引用的表没有主健

-540 57001 表定义不完整,直到为主健建立了唯一索引或UNIQUE语句、或者包含GENERATED BYDEFAULT属性的ROWID列

-542 42831 可以为空的列不允许作为主健的一部分包含在内

-543 23511 因为该表是指定了SET NULL删除规则的参照约束的父表而且检查约束不允许NULL,所以DELETE不能发生

-544 23512 不能用ALTER添加检查约束,因为已存在的某行与该检查约束冲突

-545 23513 INSERT或者UPDATE导致检查约束冲突

-546 42621 在CREATE或ALTER TABLE中指定的检查约束无效

-548 42621 因为指定的列而引起的检查约束无效

-549 42509 DYNAMICRULES(BIND)计划或程序包的无效SQL语句

-551 42501 用户试图对不拥有权限的特定的对象进行操作,或者表不存在

-552 42502 用户试图执行未被授权的操作

-553 42503 不能指定CURRENT SQLID,因为用户尚没有被允许改变那个
ID
-554 42502 不能对你本身赋予一个权限

-555 42502 不能对你本身撤销一个权限

-556 42504 不能撤销用户没有拥有的权限

-557 42852 指定了不一致的授予或撤销关键词

-558 56025 为授予或撤销语句指定了无效的语句(一个或一组)

-559 57002 DB2权限机制已经禁用,授予或者撤销不能被发布

-567 42501 指定的权限ID缺少对指定的程序包的绑定权限

-571 25000 不允许多点更新

-573 42890 不能定义参照约束,因为已指定的父表中在指定的列上没有唯一健

-574 42864 指定的缺省与列定义冲突

-577 38002 试图修改用户自定义函数中的数据或者存储过程中的数据,但这些对象的建立没有选择MODIFIES SQL DATA选项

-579 38004 试图修改用户自定义函数中的数据或者存储过程中的数据,但这些对象的建立没有选择READ SQL DATA选项,也没有选择 MODIFIES SQL DATA选项

-580 42625 CASE表达式中的结果表达式不能都是空的

-581 42804 CASE表达式中的结果表达式为不兼容的数据类型

-582 42625 SEARCHED-WHEN-CLAUSE中的查找条件指定了一个限定的、IN或EXISTS谓词

-583 42845 指定的函数失败,因为他不是决定性的,或者可能有外部动作

-585 42732 在当前路径中模式名不止一次出现

-586 42907 CURRENT PATH专用寄存器在长度上不能超过254字符

-587 428C6 项目引用的列表必须是同一个家族

-590 42734 在命名的存储过程或用户自定义的函数中的参数必须是独一无二的

-592 42510 没有授权权限,让你在WLM环境中建立的存储过程或者用户自定义函数

-601 42710 试图创建(或重命名)已经存在的对象

-602 54008 CREATE INDEX语句中指定的列太多

-603 23515 因为发现有重复值,所以不能建立唯一的索引

-604 42611 在CREATE或ALTER TABLE语句中的为数据类型指定的长度、精度以及标度无效

-607 42832 指定的INSERT、UPDATE或DELETE语句不能被发布,应为这些语句对DB2 CATLOG表执行写操作

-611 53088 当LOCKSIZE是TABLE或者TABLESPACE时,LOCKMAX必须为
0
-612 42711 在同一个表、索引或试图中不允许有重复列名

-613 54008 主健或UNIQUE约束太长或者包含了太多的列

-614 54008 已经超过了索引的内部健长度的最大长度(255)限制

-615 55006 不能删除这个程序包,因为该程序包目前正在执行

-616 42893 指定的对象不能被删除,因为其他对象依赖于该对象

-617 56089 对于DB2版本6,1型索引无效。对于以前的版本,1型索引不能用LOCKSIZE ROW或LARGE表空间定义

-618 42832 对DB2 CATALOG表的请求操作时不允许的

-619 55011 DSNDB07不能修改,除非他先被停止了

-620 53001 对在DSNDB07中的表空间不允许指定该关键词

-621 58001 遇到了重复的DBID,遇到了系统问题

-622 56031 不能指定FOR MIXED DATA因为没有安装混合数据选项

-623 55012 不能为单一的表定义多个族索引

-624 42889 不能为单一的表定义多个主健

-625 55014 用主健定义的表要求唯一索引

-626 55015 不能发布ALTER语句来改变PRIQTY SECQTY或ERASE,除非先停止了表空间

-627 55016 不能发布ALTER语句来改变PRIQTY SECQTY或ERASE,除非先把表空间定义为使用存储器组的表空间

-628 42613 指定语句时相互排斥的(例如,不能分区一个分段的表空间)

-629 42834 因为该外健不能包含空值,所以SET NULL无效

-630 56089 不能为1型索引指定
WHERE NOT NULL
-631 54008 无效的外健;要么是比254个字节长,要么包含的列数多于
40
-632 42915 指定的删除规则禁止把这个表定义为已制定表的从属表

-633 42915 无效删除规则;必须使用特定的强制删除规则

-634 42915 在这种情况下,DELETE CASCADE不允许

-635 42915 删除规则不能有差异或者不能为
SET NULL
-636 56016 在分区索引健的升序或降序规范中,分区所以必须与该规范一致

-637 42614 遇到重复的关键词

-638 42601 在CREATE TABLE语句中缺少列定义

-639 56027 带有SET NULL的删除规则的外健的可空列不能是分区索引的列

-640 56089 不能为这个表空间指定LOCKSIZE ROW,因为在该表空间中的表上定义了1型索引

-642 54021 唯一约束包含太多的列

-643 54024 检查约束超出了3800个字符的最大长度

-644 42615 在SQL语句中为关键词指定的值无效

-646 55017 在指定的分区表空间或者缺省表空间中不能创建表,因为指定的表空间已经包含了一个表

-647 57003 指定的缓冲池无效,因为他没有被激活

-650 56090 ALTER INDEX不能被执行;提供了原因代码

-651 54025 如果CREARE或ALTER TABLE被允许,表对象的描述词(object descriptor,OBD)将超过最大值(32KB)

-652 23506 遇到了EDITRPROC或VALIDPROC冲突

-653 57004 在分区表空间中的表不可用,因为分区索引尚未被创建

-655 56036 在卷的列表中,STOGROUP不能指定为特定的或不特定(“*”)的卷

-658 42917 当试图删除指定的对象时,无法删除该对象,该对象的删除必须通过删除与之相关联的对象完成

-660 53035 不正确的分区索引规范,必须为族索引定义有限制的关键字

-661 53036 分区索引没有指定恰当的分区数目

-662 53037 试图在未分区的表空间(分段的或简单的)上建立分区索引

-663 53038 为分区索引指定的关键字限制值是一个无效数字

-665 53039 为ALTER TABLESOACE语句指定了无效的PART语句

-666 57005 SQL语句不能被处理,因为指定的函数当前正处于进行过程中

-667 42917 不能明确的删除分区表空间的族索引,必须除去分区表空间来去掉分区索引

-668 56018 不能向用EDITPROC定义的表中添加列

-669 42917 不能显式的删除分区表空间中的表,必须删除分区表空间来删除表

-670 54010 表的记录长度超过了页面的大小

-671 53040 不能更改指定的表空间的缓冲池,因为这将改变表空间的页面大小

-672 55035 在命名的表上不允许
DROP
-676 53041 只有4KB的缓冲池可被用于一个索引

-677 57011 缓冲池扩展失败,由于可用的虚拟内存的大小不足

-678 53045 为才分区索引中指定的限制健提供的值与数据类型不符

-679 57006 不能创建某一个特定对象,因为该对象的一个drop目前正在挂起

-680 54011 对DB2表不能超过750列

-681 23507 列违反了指定的
FIELDPROC
-682 57010 不能载入
FIELDPROC
-683 42842 列、单值类型、函数或者过程无效,因为不兼容语句。例如,指定的INTEGER具有FORBITDATA选项

-684 54012 指定的文字列表不能超过254个字节

-685 58002 FIELDPROC返回一个无效的域描述

-686 53043 用FIELDPROC定义的一个列不能与一个使用不同的FIELDPROC定义的列作比较

-687 53044 列不能与一个非兼容字段类型的列比较

-688 58002 返回不正确的数据

-689 54011 从属表定义了太多的列

-690 23508 数据定义的控制支持拒绝这个语句

-691 57018 命名的注册表不存在

-692 57018 命名的索引不存在,但命名的注册表需要该索引

-693 55003 命名的注册表/索引的命名列无效

-694 57023 DROP正在命名的注册表上挂起

-696 42898 由于相关的名字或者转换表的名字使用不正确,指定的触发器无效

-697 42899 FOR EACH语句被指定,因此与OLD合NEW相关的名字是不允许的,或者不能为一个BEFORE触发器指定OLD_TABLE和
NEW_TABLE
-713 42815 指定的专用寄存器是无效的

-715 56064 命名的程序不能被运行,因为他依赖与你所安装的DB2版本的部件,但是你的数据中心没有安装这个部件

-716 56065 命名的程序使用这个版本的不正确的发行版本做了预编译

-717 56066 BIND失败,因为他依赖与你所安装的DB2版本的部件,但是你的数据中心没有安装这个部件

-718 56067 REBIND失败,因为IBMREQD列无效

-719 42710 不能BIND ADD一个已经存在的程序包

-720 42710 不能BIND REPLACE一个已经存在的程序包版本

-721 42710 程序包的一致性记号必须是独一无二的

-722 42704 绑定错误,因为指定的程序包不存在

-723 09000 一个触发的SQL语句接受到一个错误

-724 54038 达到了(16)级联间接的SQL语句的最大项目

-725 42721 对专门指定的寄存器提供了一个无效值

-726 55030 因为SYSPKSYSTEM条目,不能绑定这个程序包

-728 56080 指定的数据类型不能与私有协议发布一起使用

-729 429B1 用COMMIT ON RETURN定义的存储过程不能用作嵌套的CALL过程的目标

-730 56053 在只读的共享数据库中为表定义的参照完整性无效

-731 56054 VSAM数据集必须用SHAREOPTION(1.3)定义

-732 56055 被定义为只读型数据库却拥有没有定义空间或者索引空间的DB2子系统

-733 56056 只读共享数据库的定义不一致

-734 56057 一旦一个数据库被定义为ROSHARE READ,他将不能被更改为其他不同的ROSHARE状态

-735 55004 用DBID名称标识的数据库不再是一个只读共享数据库

-736 53014 命名的DBID无效

-737 53056 在这种状况下,不能建立一个隐含的表空间

-739 56088 因为同时指定了ALLOW PARALLEL和MODIELES SQL DATA这两个语句,因此已设定的函数将不能再被更改

-740 51034 在这种方式下不能用MODIELES SQL DATA定义指定的函数

-741 55030 已经为命名的共享组成员的数据定义了工作文件数据库

-742 53004 DSNDB07是隐含的工作文件数据库

-746 57053 在特定的触发器、存储过程或函数中的SQL语句违反嵌套SQL限制

-747 57054 指定的表是不可用的除非为LOB数据列建立起必须的辅助表

-748 54042 在指定的辅助表上已经有一个索引

-750 42986 不能对已指定的表重新命名,因为他至少在一个现存的视图或触发器中被引用

-751 42987 存储过程或用户自定义的函数试图执行一个不允许执行的SQL语句。DB2的线程被置于MUST_ROLLBACK状态

-752 0A001 无效CONNECT语句

-763 560A1 无效的表空间名

-764 560A2 LOB表空间必须与其相关的基表空间同在一个数据库中

-765 560A3 表和数据库不兼容

-766 560A4 不能对辅助表进行请求的操作

-767 42626 CREATE INDEX失败,因为在辅助表中为索引指定了列,或者因为没有为非辅助表的索引指定列

-768 560A50 不能为指定的列或者指定的分区建立辅助表,因为其辅助表已经存在

-769 53096 CREATE AUX TABLE的规格与基表不匹配

-770 530A6 指定的表必须有一个ROWID列,那么该表才可以包含一个LOB列

-771 428C7 无效的ROWID列规范

-797 42987 CREATE TRIGGER包含不被支持的语法

-798 428C9 不能把一个值插入到用GENERATED ALWAYS定义的ROWID列

-802 22012 某一特定操作发生了异常错误。被零除

22003 某一特定操作发生了异常错误。但不是被零除

-803 23505 不能插入行,因为这将违反唯一索引的约束

-804 07002 SQLDA的调用参数列表有误

-805 51002 在计划中没有发现DBRM或程序包名

-807 23509 对已指定的环境和连接,该程序包不可用

-808 08001 CONECT语句与程序中的第一个CONNECT语句不一致

-811 21000 当多行作为一内嵌的选择语句的返回结果是,必须使用游标

-812 22508 在CURRENT PACKAGESET中的ID集合是空白的,语句不能被执行

-815 42920 在一个内置选择语句或者一个基本谓词的子查询中,显式的或隐含的指定了GROUP BY或HAVING语句

-817 25000 执行SQL语句将可能导致禁止更新用户数据或DB2编目

-818 5103 计划<->载入组件的时间戳不匹配,在执行计划中没有从同一个预编译中建立DBRM,该预编译是作为组件载入的

-819 58004 视图不能重建,因为在DB2编目中存储的分析树长度为
0
-820 58004 在这个DB2版本的DB2编目中遇到了无效值

-822 51004 在SQLDA中遇到了无效地址

-840 54004 在选择列表或插入列表中返回的项目太多

-842 08002 到指定位置的连接已经存在

-843 08003 SET CONNECTION或RELEASE语句无法执行,因为连接不存在

-870 58026 宿主变量描述符的个数不等于语句中宿主变量的个数

-872 51302 这个子系统已指定了有效的
CCSID
-873 53090 同一SQL语句中,不能同时引用EBCDIC表中的定义的列和ASCII表中定义的列

-874 53901 指定对象的编码方案与其表空间的编码方案不匹配

-875 42988 指定的操作符不能用于ASCII数据

-876 53092 不能为指定的原因创建对象:提供了原因代码

-877 53093 数据库或表空间不允许用ASCII,必须使用
EBCDIC
-878 53094 该PLAN――TABLE不能是ASCII,必须使用
EBCDIC
-879 53095 指定对象的CREATE或ALTER语句不能将列、单值类型,某个存储过程或用户自定义函数的参数定义为以下类型:MAXED DATA, GRAPHIC,VARGRAPHIC,LONGVARGRAPHIC,因为系统没有为指定的编码方案定义相应的
CCSID
-900 08003 应用处理没有连接到应用服务器,语句不能被执行

-901 58004 遇到时断时续的系统错误,该错误不能抑制后继的SQL语句的执行

-902 58005 内部控制块的指针错误,要求重新绑定

-904 57011 指定的资源不可用
-905 57014 超出了资源上限

-906 51005 因为重大错误,SQL语句无法执行

-908 23510 当前资源限制设施的规范或者自动重绑定的系统参数不允许BIND,REBIND,
AUTOREBIND
-909 57007 对象已被删除

-910 57007 因为在该对象上挂起DROP,所以不能访问该对象

-911 40001 当前工作单元已被回滚

-913 57033 因为死锁或超时导致不成功执行

-917 42969 绑定程序包已经失败

-918 51021 SQL语句不能被执行,因为连接丢失

-919 56045 需要一个
ROLLBACK
-922 42505 连接权限失败。试图从TSO、CICS或IMS访问DB2,同时相应的连接设施处于非活动的状态

-923 57015 因为DB2不可用,所以不能建立连接

-924 58006 遇到了DB2内部的连接错误:提供了原因代码

-925 2D521 SQL的COMMIT语句不能从CICS或IMS/TM发布

-926 2D521 SQL的ROLLBACK语句不能从CICS或IMS/TM发布

-927 51006 当正在连接的环境没有建立时,语言接口被调用。利用DSN命令激发该程序

-929 58002 数据获取退出已经失败(DPROP)

-939 51021 由于远程服务器的未请求的回滚,要求一个回滚

-947 56038 SQL语句失败,因为更新不能被传播(DPROP)

-948 56062 DDF没有启动,分布式操作无效

-950 42705 在SQL语句中指定的位置在SYSIBM.LOCATIONS中没有定义

-965 51021 存储过程非正常终止(在DB2 6之前的版本)

-981 57015 当前不是处于允许SQL的状态时,试图在RRSAF中执行
SQL
-991 57015 调用连接不能建立一个到DB2的隐含或开放连接

-2001 53089 为储存过程指定的宿主变量参数的个数不等于预期的参数个数

-20003 560A7 不能为GRECP中的表空间或索引指定
GBPCACHE NONE
-20004 560A8 对于WORKFILE对象。8KB或16Kb的缓冲池页面大小无效

-20005 54035 指定的对象类型超出了内部的ID极限

-20006 53097 当没有指定WLM环境时,LOB不能被指定为参数

-20070 53098 不能非LOB列建立一个辅助表

-20071 53099 必须指定WLM环境名

-20072 56052 指定的权限ID不拥有在触发器程序包上执行BIND所需的权限

-20073 42927 不能按照指定的要求更改命名的函数,因为在现存的视图定义中引用了该函数

-20074 42939 不能建立指定的对象,因为“SYS”是一个保留的前缀

-20100 56059 在被触发的SQL语句中有BIND错误,指定了错误的SQLCODE和
SQLSTATE
-20101 56059 由于指定的原因代码,该函数失败

-20102 42849 在CREATE或ALTER FUNCTION语句中不能使用指定的选项

-20104 42856 更改一个CCSID失败

-20106 42945 不能改变表空间或数据库的CCSID,因为现存的试图引用

-30000 58008 DRDA分布协议错误;处理可以继续

-30002 57057 使用DRDA的分布式客户把OPEN语句连接到PREPARE,但PREPARE接受到一个SQLCODE为+495的警告

-30020 58009 DRDA分布协议错误;对话被解除

-30021 58010 DRDA分布协议错误;处理不能继续

-30030 58013 违反分布协议:COMMIT不成功,对话被解除(AS)

-30040 57012 因为不能得到资源,执行失败,处理可以继续(AS)

-30041 57013 因为不能得到资源,执行失败,处理不能成功的继续(AS)

-30050 58011 执行不成功,在BIND过程中不能执行语句

-30051 58012 特定的BIND过程不是处于活动状态(远程BIND),从而导致失败

-30052 42932 程序准备的假设错误

-30053 42506 程序包的拥有者遭遇授权失败

-30060 08004 RBD遭遇授权失败

-30061 08004 指定了无效或者没有存在的
RDB
-30070 58014 目标子系统不支持这个命令

-30071 58015 目标子系统不支持这个对象

-30072 58016 目标子系统不支持这个参数

-30073 58017 目标子系统不支持这个参数值

-30074 58018 应答信息不被支持

-30080 08001 SNA通信错误

-30081 58019 TCP/IP通信错误

-30082 08001 由于安全冲突、通信失败:提供了原因代码

-30090 25000 指定的操作对远程执行失败

-30104 56095 在绑定选项与绑定值中有错误

-30105 56096 指定的绑定选项不兼容


对表进行任何操作都不被允许,提示SQLSTATE=57016 SQLCODE=-668 ,原因码 "7"的错误:SQL0668N  Operation not allowed for reason code "7" on table XXX. 解决方法为:执行命令:reorg table XXX;即可。
参考原文为:
Operation not allowed for reason code reason-code on table table-name.
Explanation: Access to table table-name is restricted. The cause is based on the following reason codes reason-code: 7
    The table is in the reorg pending state. This can occur after an ALTER TABLE statement containing a REORG-recommended operation.7
    Reorganize the table using the REORG TABLE command (note that INPLACE REORG TABLE is not allowed for a table that is in the reorg pending state).
其中:
   reorg   table   <tablename>   通过重构行来消除“碎片”数据并压缩信息,对表进行重组。
   runstats   on   table   <tbschema>.<tbname>   收集表   <tbname>   的统计信息。
   reorgchk   on   table   all   确定是否需要对表进行重组,对于对所有表自动执行   runstats   很有用。
  >>> reorg   和runstats   都是单个表优化,初始化的命令:
           runstats on table administrator.test;
           reorg table administrator.test; 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值