oracle与db2有哪些区别

更新时间:2023-11-30 08:33:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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型

-103 42604 无效数学文字

-104 42601 -105 42604 -107 42622 -108 42601 -109 42601 -110 42606 -111 42901 -112 42607 -113 42602 -114 42961 -115 42601 -117 42802 -118 42902 -119 42803 -120 42903 -121 42701 -122 42803 -123 42601 -125 42805 -126 42829 -127 42905 -128 42601 -129 54004 -130 22019 22025 -131 42818 -132 42824 -133 42906 -134 42907 -136 54005 -137 54006 -138 22011 -142 42612 -144 58003 -147

42809

SQL语句中遇到非法符号

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

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

指定了无效语句;例如CREATE VIEW不能包含ORDER BY 语句 遇到了无效的十六进制的文字 指定的列函数没有给出列名

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

该语句的位置名称必须与当前服务器匹配,但是却没有匹配 因为比较运算符没有伴着一个表达式或者列表,遇到了无效谓词 待插入的数值的个数于被插入的行中的列数不相等

数据修改语句(UPDATE或DELETE)和FROM语句中的表和视图命名不合法 HAVING语句中的列的列表与GROUP BY语句中的列列表不匹配 不允许WHERE语句、SET语句、VALUES语句或者SET ASSIGNMENT语句引用列函

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

非法使用了列函数。因为没有用于一个列函数的所有列不再GROUP BY语句中 特定位置的参数必须是一个常数或者一个关键词

ORDER BY语句中指定了无效数字,该数字要么小于1要么大于选定的列数 不能为一个UPDATE语句指定ORDER BY语句 在子选择中DISTINCT只能指定一次 SQL谓词中NULL使用不当 SQL语句中包含的表多于15个 ESCAPE语句必须为一个字符 无效的ESCAPE模式 LIKE谓词只能用于字符数据

LIKE语句、ESCAPE语句、LOCATE函数或POSSTR函数中有无效运算对象 无效相关子查询引用

大于255字节的列被不正确使用 排序关键字的长度大于4000字节

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

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

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

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

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

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

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

无效的视图建立请求,必须为旋转列表中列出的列出的未命名的列或者重复的列-153 42908 -154 42909 -156 42809 -157 42810 -158 42811 -159 42089 -160 42813 -161 44000 -164 42502 -170 42605 -171 42815 -173 42801 -180 22007 -181 22001 -182 42816 -183 22008 -184 42610 -185 57008 -186 22505 -187 22506 -188 22503 -189 22522 -190 42837 -191 22504 -197 42877 -198 42617 -199 42601 -203 42702 -204

42704

一个名字

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

在视图上建立索引是非法的,或者在ALTER TABLE,CREATE TRIGGER,DROP TALOCK TABLE语句上指定一个不是表的其他对象这是无效的 必须在FOREIGN KEY语句中指定一个表名 视图的列和选择列表中的列不相匹配 无效DROP或COMMENT ON语句 对该视图的WITH CHECK OPTION无效

正被更新的视图WITH CHECK OPTION语句使得这行不能被插入或更新 用户没有建立这个视图的权限 标量函数指定了无效的参数个数

标量函数指定了无效的数据类型长度或者无效数值 在非只读型的游标上不能指定隔离级别UR

DATE、TIME、TIMESTAMP值的字符串表示法的语法不对 不是有效的DATE、TIME、TIMESTAMP值 在算术表达式中的日期/时间值无效

在算术表达式中返回的日期/时间值的结果不在有效值的范围内 没有正确使用日期/时间值的参数标记 没有定义本定的日期/时间出口

改变本定的日期/时间出口引发这个程序的长度无效 MVS返回无效的当前日期/时间 字符串表示无效

指定的编码字符集的ID无效或没有定义 不能象所设定的那样改变(ALTER)列。只能改变(ALTER)VARCHAR列的长度

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

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

试图对空的字符串发布一个PREPARE或EXECUTE IMMEDIATE语句 SQL语句中使用了非法关键词 模糊列引用 没有定义的对象名

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

列名没有在FROM语句所引用的任何表中,或者没有在定义触发器所在的表中 -208 42707 -212 42712 -214 42822 -219 42704 -220 55002 -221 55002 -229 42708 -240 428B4 -250 42718 -251 42602 -300 22024 -301 42895 -302 22001 22003 -303 42806 -304 22003 -305 22002 -309 22512 -310 22501 -311 22501 -312 42618 -313 07001 -314 42714 -327 22525 -330 22021 -331 22021 -332 57017 -333 56010 -338 42972 -339 56082 -350 42962 -351 56084 -352 56084 -355 42993 -372

428C1

不能ORDER BY指定列,应为该列不在选择列表中 指定的表名在触发器中不允许多次使用,只能使用一次 DISTINCT、ORDER BY 引起的无效表达式 因为PLAN_TABLE不存在,EXPLAIN无法执行 遇到无效的PLAN_TABLE列

如果为PLAN_TABLE定义了可供选择的列,那么,必须定义所有的列 指定的现场找不到

LOCK TABLE语句的PART子句无效 没有定义本地位置名 记号无效

宿主变量或参数中的字符串不是以NULL为终止 无效的宿主变量数据类型 输入的变量值对指定的列无效 输入的变量值对指定的列而言太大 因为数据类型不兼容,不能分配数值 因为数据超出了范围,不能分配数值 没有NULL指示符变量

因为引用的宿主变量被设置成NULL,所以谓词无效 十进制的宿主变量或参数包含非十进制数据 输入的宿主变量长度无效,或者时负值或者太大 没有定义宿主变量或者宿主变量不可用 宿主变量的个数不等于参数标识的个数 模糊的宿主变量引用

在最后分区的关键字范围内,不能插入行 不能成功的翻译字符串

字符串不能分配到宿主变量,因为其不能成功的被翻译 不能为两个命名的编码字符集的ID定义翻译规则 子类型无效导致翻译失败 ON语句无效,必须引用连接的列

访问DB2 2.2版本的子系统被拒绝,原因时ASCII到EBCDIC翻译不能进行无效的大对象规范

SELECT列表中有不支持的数据类型 输入列表中有不支持的数据类型 LOB列太大,以至不能被记录在日志中 每个表只允许有一个ROWID列

-390 42887 -392 42855 -396 38505 -397 428D3 -398 428D2 -399 22511 -400 54027 -401 42818 -402 42819 -404 22001 -405 42820 -406 22003 -407 23502 -408 42821 -409 42607 -410 42820 -411 56040 -412 42823 -413 22003 -414 42824 -415 42825 -416 42907 -417 42609 -418 42610 -419 42911 -420 22018 -421 42826 -423 0F001 -426 2D528 -427 2D529 -430 38503 -433 22001 -435 428B3 -438 xxxxx -440 42884 -441 42601 -443

42601

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

自从前一次FETCH以来,指定游标的SQLDA已被不恰当的改变 在最后的访问过程中,视图执行SQL语句

在某一列上不恰当的指定了GENERATED因为该列不是ROWID数据类型 为某一个宿主变量请求LOCATOR,但是该宿主变量不是一个LOB 在INSERT语句中为ROWID列指定的值无效

在DB2编目中定义的用户自定义索引不能超过100个 算术操作符或比较操作符的操作对象不是兼容的 算术函数不能用于字符或日期时间数据 SQL语句指定的字符串太长 数值文字超出了范围

计算出的或者倒出的数值超出了范围 不能把NULL值插到定义为NOT NULL的列中

数值不能被更新或插入,因为他与列的数据类型不兼容 COUNT函数指定的运算对象无效 浮点文字笔30个字符的最大允许长度长 CURRENT SQLID使用无效

在子查询的选择列表中遇到了多个列 当转换为一个数字型数据类型时,数据溢出

LIKE谓词不能运行于用数字或日期时间类型定义的列 为UNION操作指定的选择列表不是联合兼容的 包含UNION操作符的SQL语句不允许有长的字符串列 两参数标识符作为运算对象被指定在同一谓词的两边 参数标识符使用无效 十进制除法无效

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

UNION操作的选择列表中没有提供相同数目的列 为LOB或结果集定位器指定的值无效

在不允许更新的应用服务器不允许执行COMMIT语句 在不允许更新的应用服务器不允许执行ROLLBACK语句 在用户自定义的函数或存储过程中遇到了错误 指定的值太长

无效的应用定义的SQLSTATE

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

存储过程或用户自定义函数的参数列表参数个数于预期的个数不匹配 与标量函数一起使用DISTINCT或ALL是不正确的用法 指定的外部函数返回错误的SQLSTATE

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

对存储过程或用户自定义的 函数,CREATE或ALTER语句不正确(缺失EXTERNA-449 42878 -450 39501 -451 42815 -453 42880 -454 42723 -455 42882 -456 42710 -457 42939 -458 42883 -463 39001 -469 42886 -470 39002 -471 55023 -472 24517 -473 42918 -475 42866 -476 42725 -478 42893 -480 51030 -482 51030 -483 42885 -487 38001 -491 42601 -492 42879 -495 57051 -496 51033 -497 54041 -499 24516 -500 24501 -501 24501 -502 24502 -503

42912

子句)

存储过程或用户自定义函数写入存储器的值超过了参数声明的长度 CREATE FUNCTION中指定了不正确的数据类型 用户自定义函数中的RETURNS语句无效

指定的函数识别标记与已存在的另一函数的识别标记冲突 模式名不比配

为用户自定义函数指定的函数名已经存在 用户自定义函数或用户自定义类型正试图使用系统中定义的函数或者类型所用的

没有找到函数

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

参数定义为OUT或INOUT的CALL语句必须提供宿主变量 指定了NULL参数,但是该例程却不支持NULL 存储过程或用户自定义函数失败:提供原因代码 外部的函数程序使游标处于打开状态

用户自定义数据类型命名不能和系统定义的数据类型一样 结果类型不能被转换成RETURNS类型 在其模式中该函数不是独一无二的

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

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

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

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

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

CREATE FUNCTION语句无效,因为该语句没有RETURNS语句或者因为该语句没有有效的SOURCE或者EXTERNAL语句 指定函数的指定参数的个数有错误 语句的估计处理器成本超出了资源限制

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

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

指定的游标已被分配到结果集,该结果集来自已经指定的存储过程 因为连接被破坏,WITH HOLD游标被关闭

在试图获取数据或关闭一个游标前必须打开一个游标 在没有关闭游标前不能再次打开游标

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

-765 -766 -767 -768 560A3 560A4 42626

表和数据库不兼容

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

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

560A50 不能为指定的列或者指定的分区建立辅助表,因为其辅助表已经存在 -769 53096 -770 530A6 -771 428C7 -797 42987 -798 428C9 -802 22012 22003 -803 23505 -804 07002 -805 51002 -807 23509 -808 08001 -811 21000 -812 22508 -815 42920 -817 25000 -818 5103 -819 58004 -820 58004 -822 51004 -840 54004 -842 08002 -843 08003 -870 58026 -872 51302 -873 53090 -874 53901 -875 42988 -876 53092 -877 53093 -878

53094

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

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

CREATE TRIGGER包含不被支持的语法

不能把一个值插入到用GENERATED ALWAYS定义的ROWID列 某一特定操作发生了异常错误。被零除 某一特定操作发生了异常错误。但不是被零除 不能插入行,因为这将违反唯一索引的约束 SQLDA的调用参数列表有误 在计划中没有发现DBRM或程序包名 对已指定的环境和连接,该程序包不可用

CONECT语句与程序中的第一个CONNECT语句不一致 当多行作为一内嵌的选择语句的返回结果是,必须使用游标 在CURRENT PACKAGESET中的ID集合是空白的,语句不能被执行

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

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

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

视图不能重建,因为在DB2编目中存储的分析树长度为0 在这个DB2版本的DB2编目中遇到了无效值 在SQLDA中遇到了无效地址

在选择列表或插入列表中返回的项目太多 到指定位置的连接已经存在

SET CONNECTION或RELEASE语句无法执行,因为连接不存在 宿主变量描述符的个数不等于语句中宿主变量的个数 这个子系统已指定了有效的CCSID

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

指定对象的编码方案与其表空间的编码方案不匹配 指定的操作符不能用于ASCII数据

不能为指定的原因创建对象:提供了原因代码 数据库或表空间不允许用ASCII,必须使用EBCDIC 该PLAN——TABLE不能是ASCII,必须使用EBCDIC

-879 53095 指定对象的CREATE或ALTER语句不能将列、单值类型,某个存储过程或用户自数的参数定义为以下类型:MAXED DATA,GRAPHIC,VARGRAPHIC,LONGVARGRAPH-900 08003 -901 58004 -902 58005 -904 57011 -905 57014 -906 51005 -908 23510 -909 57007 -910 57007 -911 40001 -913 57033 -917 42969 -918 51021 -919 56045 -922 42505 -923 57015 -924 58006 -925 2D521 -926 2D521 -927 51006 -929 58002 -939 51021 -947 56038 -948 56062 -950 42705 -965 51021 -981 57015 -991

57015

-2001 53089 -20003 560A7 -20004 560A8 -20005 54035 -20006 53097 -20070 53098

为系统没有为指定的编码方案定义相应的CCSID 应用处理没有连接到应用服务器,语句不能被执行

遇到时断时续的系统错误,该错误不能抑制后继的SQL语句的执行 内部控制块的指针错误,要求重新绑定 指定的资源不可用 超出了资源上限

因为重大错误,SQL语句无法执行 当前资源限制设施的规范或者自动重绑定的系统参数不允许BIND,REBIND,AUTO

对象已被删除

因为在该对象上挂起DROP,所以不能访问该对象 当前工作单元已被回滚 因为死锁或超时导致不成功执行 绑定程序包已经失败

SQL语句不能被执行,因为连接丢失 需要一个ROLLBACK

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

因为DB2不可用,所以不能建立连接 遇到了DB2内部的连接错误:提供了原因代码 SQL的COMMIT语句不能从CICS或IMS/TM发布 SQL的ROLLBACK语句不能从CICS或IMS/TM发布

当正在连接的环境没有建立时,语言接口被调用。利用DSN命令激发该程序 数据获取退出已经失败(DPROP)

由于远程服务器的未请求的回滚,要求一个回滚 SQL语句失败,因为更新不能被传播(DPROP) DDF没有启动,分布式操作无效

在SQL语句中指定的位置在SYSIBM.LOCATIONS中没有定义 存储过程非正常终止(在DB2 6之前的版本)

当前不是处于允许SQL的状态时,试图在RRSAF中执行SQL 调用连接不能建立一个到DB2的隐含或开放连接

为储存过程指定的宿主变量参数的个数不等于预期的参数个数 不能为GRECP中的表空间或索引指定GBPCACHE NONE 对于WORKFILE对象。8KB或16Kb的缓冲池页面大小无效 指定的对象类型超出了内部的ID极限

当没有指定WLM环境时,LOB不能被指定为参数 不能非LOB列建立一个辅助表

-20071 53099 -20072 56052 -20073 42927 -20074 42939 -20100 56059 -20101 56059 -20102 42849 -20104 42856 -20106 42945 -30000 58008 -30002 57057 -30020 58009 -30021 58010 -30030 58013 -30040 57012 -30041 57013 -30050 58011 -30051 58012 -30052 42932 -30053 42506 -30060 08004 -30061 08004 -30070 58014 -30071 58015 -30072 58016 -30073 58017 -30074 58018 -30080 08001 -30081 58019 -30082 08001 -30090 25000 -30104 56095 -30105 56096

必须指定WLM环境名

指定的权限ID不拥有在触发器程序包上执行BIND所需的权限 不能建立指定的对象,因为“SYS”是一个保留的前缀

在被触发的SQL语句中有BIND错误,指定了错误的SQLCODE和SQLSTATE 由于指定的原因代码,该函数失败

在CREATE或ALTER FUNCTION语句中不能使用指定的选项 更改一个CCSID失败

不能改变表空间或数据库的CCSID,因为现存的试图引用 DRDA分布协议错误;处理可以继续

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

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

DRDA分布协议错误;对话被解除 DRDA分布协议错误;处理不能继续

违反分布协议:COMMIT不成功,对话被解除(AS) 因为不能得到资源,执行失败,处理可以继续(AS) 因为不能得到资源,执行失败,处理不能成功的继续(AS) 执行不成功,在BIND过程中不能执行语句

特定的BIND过程不是处于活动状态(远程BIND),从而导致失败 程序准备的假设错误 程序包的拥有者遭遇授权失败 RBD遭遇授权失败

指定了无效或者没有存在的RDB 目标子系统不支持这个命令 目标子系统不支持这个对象 目标子系统不支持这个参数 目标子系统不支持这个参数值 应答信息不被支持 SNA通信错误 TCP/IP通信错误

由于安全冲突、通信失败:提供了原因代码 指定的操作对远程执行失败 在绑定选项与绑定值中有错误 指定的绑定选项不兼容

计算时间值差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))

执行一个存储过程

例:CREATE PROCEDURE 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的变量设为\并且将控制流返回给调 用者。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),

本文来源:https://www.bwwdw.com/article/kfht.html

Top