您的位置:首页 > 数据库 > Oracle

Oracle 和 DB2有哪些区别

2015-05-21 09:36 211 查看
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, char( timestamp('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中间空格隔开,而且必须IN在OUT之前

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;

11:54
浏览 (66)
评论 (0)
分类: DB2

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

10:57
浏览 (23)
评论 (0)
分类: DB2

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';

10:56
浏览 (42)
评论 (0)
分类: DB2

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

10:55
浏览 (87)
评论 (0)
分类: DB2

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: