db2与oracle差别
db2和oracle的一些区别
END PRO1;
3、控制语句的不同
db2: IF THEN ......ELSEIF THEN .... END IF;
oracle: IF THEN ......ELSIF THEN .... END IF;
db2:CREATE PROCEDURE PRO1()
LANGUAGE SQL
P1: BEGIN
--变量定义
DECLARE INSERT_DATE TIMESTAMP;
2)同时作为输入输出参数的写法不同
db2: CREATE PROCEDURE PRO1 (INOUT OrgID int) INOUT连着写
oracle:CREATE PROCEDURE PRO1 (OrgID IN OUT int) IN OUT中间空格隔开,而且必须IN在OUT之前
1、创建PROCEDURE的参数的区别
1)参数类型和参数名称的位置不同
db2: CREATE PROCEDURE PRO1 (IN OrgID int)
oracle:CREATE PROCEDURE PRO1 (OrgID IN int)
db2中变量定义在BEGIN END体内,并且每个变量都要用DECLARE声明;存储过程结束时,END后跟P1,并且不需要分号
oracle中变量定义必须在BEGIN END体外,变量都不需要用DECLARE声明(有种说法是,第一个变量需要DECLARE,其他变量不需要);存储过程结束时,END后跟存储过程的名称,并且需要分号
3)没有输入或输出参数时
db2:ห้องสมุดไป่ตู้ CREATE PROCEDURE PRO1 ()
db2和oracle中character类型
DB2和Oracle是两种常见的关系数据库管理系统,它们在数据存储和处理方面有着不同的特点。
其中,character类型是在数据库中存储字符数据的一种数据类型,它在DB2和Oracle中又有哪些不同呢?本文将从以下几个方面对DB2和Oracle中的character类型进行详细介绍和对比分析。
一、数据类型定义1.1 DB2中的character类型在DB2中,character类型可以分为char和varchar两种。
其中,char表示固定长度的字符类型,需要指定字符的长度,例如char(10)表示存储10个字符的固定长度字符串;而varchar表示可变长度的字符类型,同样需要指定字符的最大长度,例如varchar(100)表示最大可存储100个字符的可变长度字符串。
1.2 Oracle中的character类型在Oracle中,character类型也可以分为char和varchar2两种。
char和varchar2的区别与DB2中的定义相似,char表示固定长度的字符类型,需要指定字符的长度,例如char(10);而varchar2表示可变长度的字符类型,同样需要指定字符的最大长度,例如varchar2(100)。
二、存储空间2.1 DB2中character类型的存储空间在DB2中,char类型的存储空间是固定的,它会根据指定的长度分配固定的存储空间,不会因实际存储的字符长度而改变。
而varchar类型的存储空间是可变的,它会根据实际存储的字符长度分配相应的存储空间,因此在实际应用中更加灵活。
2.2 Oracle中character类型的存储空间在Oracle中,char类型和varchar2类型的存储空间分配与DB2类似,char类型的存储空间是固定的,而varchar2类型的存储空间是可变的。
三、字符串比较3.1 DB2中character类型的字符串比较在DB2中,对于char类型的字符串比较是要考虑到固定长度的特点,因此对于长度不足的字符串会进行填充处理。
DB2常用函数与Oracle比较
DB2常⽤函数与Oracle⽐较 1、类型转化函数: decimal, double, Integer, smallint,real,Hex(arg),date, time,timestamp,char, varchar 常⽤举例: --转化为字符串类型 : select to_char(15.5000) from dual; : select char(15.5000) from sysibm.sysdummy1 --转化为⽇期时间 Oracle: select to_date('2008-01-01','yyyy-mm-dd') from dual; DB2: select date('2008-01-01') from sysibm.sysdummy1 2、时间⽇期: year, quarter, month, week, day, hour, minute ,second dayofyear(arg):返回arg在年内的天值 Dayofweek(arg):返回arg在周内的天值 days(arg):返回⽇期的整数表⽰法,从0001-01-01来的天数。
midnight_seconds(arg):午夜和arg之间的秒数。
Monthname(arg):返回arg的⽉份名。
Dayname(arg):返回arg的星期。
常⽤举例: --返回当前系统时间 Oracle: select sysdate from dual; DB2: select current date from sysibm.sysdummy1 --返回当前时间的下⼀天(年⽉时同理) Oracle: select sysdate,sysdate + interval '1' day from dual; DB2: select current date + 1 day from sysibm.sysdummy1 3、字符串函数: length,lcase, ucase, ltrim, rtrim Coalesce(arg1,arg2….):返回参数集中第⼀个⾮null参数。
db2和oracle中character类型
DB2和Oracle中Character类型的比较引言Character类型是关系数据库中常见的数据类型之一,用于存储字符串数据。
在DB2和Oracle这两个主流的关系数据库管理系统中,都提供了Character类型,但在具体实现和使用上存在一些差异。
本文将对DB2和Oracle中Character类型进行比较,包括数据存储方式、长度限制、字符集支持、性能等方面的差异。
数据存储方式在DB2中,Character类型的数据存储方式是定长存储,即每个字符占用固定的存储空间。
例如,如果定义一个长度为10的Character类型字段,无论实际存储的字符串长度是多少,都会占用10个字节的存储空间。
这种方式的好处是可以提高查询性能,但会浪费一些存储空间。
而在Oracle中,Character类型的数据存储方式是变长存储,即根据实际存储的字符串长度来动态调整存储空间。
例如,如果定义一个长度为10的Character类型字段,实际存储的字符串长度只有5个字符,那么只会占用5个字节的存储空间。
这种方式的好处是可以节省存储空间,但可能会影响查询性能。
长度限制DB2和Oracle在Character类型的长度限制上也存在一些差异。
在DB2中,Character类型的长度限制是固定的,需要在定义字段时显式指定长度。
例如,可以定义一个长度为50的Character类型字段来存储最多50个字符的字符串。
而在Oracle中,Character类型的长度限制是可变的,默认为最大长度为4000个字符。
如果需要存储更长的字符串,可以使用CLOB类型。
另外,从Oracle 12c开始,引入了VARCHAR2类型,可以存储最大长度为32767个字符的字符串。
字符集支持DB2和Oracle都提供了对不同字符集的支持。
在DB2中,可以通过指定字符集来定义Character类型的字段。
例如,可以使用UTF-8字符集来存储包含中文字符的字符串。
DB2与Oracle数据库对比
并行能力
DB2的并行版支持位图索引和对象关系,因此,DB2有更好的扩展性和性能。Oracle触发器无法支持并行:在一些特殊的引用完整性(referentialintegrity)的限制下,并行也无法运用:如果表格中有大对象,由于前述的限制(表不能分割),并行也无法运用。总之,Oracle在并行系统中没有实现位图索引和对象关系,
在异构的环境中,IBM数据库方案简单、更加无缝而且比Oracle的成本低; Oracle的异构网关性能差,当访问异构数据库时,Oracle缺乏全局的优化,导致了过多的数据及网络传输。
复制能力
DB2提供业界最佳效率的和最开放的复制方案;DB2提供自动冲突检测和解决方法。 Oracle只提供自动冲突检测和解决方法的例子程序,用户须对例子程序做定制后来解决复制冲突
DB2是IBM的数据库产品,近年来Oracle、Sybase等数据库的大力发展,多人认为DB2将逐步失去数据库市场,而事实证明DB2不但没有没落反而越发壮大,本文我用DB2与Oracle、Sybase等数据库作一个简单的对比,希望能让读者了解DB2能越发壮大的原因。
DB2是IBM的数据库产品,近年来Oracle、Sybase等数据库的大力发展,多人认为DB2将逐步失去数据库市场,而事实证明DB2不但没有没落反而越发壮大,本文我用DB2与Oracle、Sybase等数据库作一个简单的对比,希望能让读者了解DB2能越发壮大的原因。
分布式数据库
DB2分布式数据库的处理(如两阶段提交)及连接功能是建立在DB2的核心中,不需要使用其它的产品附件。性能好,易使用,减少开支。ORACLE的分布式功能需要另外购买DistributedOption以及SQL*NET等产品才能实现分布式数据库的连接。
oracle与db2的差异
固兼容的写法是select * from(子查询) t
5、DATE数据类型的区别
ORACLE中DATE型也是带有时分秒的,但DB2下DATE只是年月日,如'2007-04-28',且可作为字符串直接操作,DB2中要记录时分秒必须采用TIMESTAMP型
一个采用hibernate后常见的兼容问题是:
对于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书写方法
9、decode方法
Oracle:decode方法(DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值))或者case语句
DB2中只有CASE表达式
SELECT id ,name ,
CASE
WHEN integer(flag)=0 THEN ‘假’
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
SqlServer和Oracle,db2的区别
SqlServer和Oracle,db2的区别1.开放性:SQL Server 只能在windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。
Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。
而且windows平台的可靠性,安全性和伸缩性是非常有限的。
它不象unix那样久经考验,尤其是在处理大数据量的关键业务时.Oracle 能在所有主流平台上运行(包括 windows)。
完全支持所有的工业标准。
采用完全开放策略。
可以使客户选择最适合的解决方案。
对开发商全力支持。
DB2 能在所有主流平台上运行(包括windows)。
最适于海量数据。
DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%.2.可伸缩性,并行性SQL server DB2 并行实施和共存模型并不成熟。
很难处理日益增多的用户数和数据卷。
伸缩性有限。
Oracle 平行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。
如果windowsNT不能满足需要, 用户可以把数据库移到UNIX中。
DB2 DB2具有很好的并行性。
DB2把数据库管理扩充到了并行的、多节点的环境. 数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。
数据库分区有时被称为节点或数据库节点3.安全性SQL server 没有获得任何安全证书。
Oracle Server 获得最高认证级别的ISO标准认证。
DB2 获得最高认证级别的ISO标准认证。
4.性能SQL Server 多用户时性能不佳Oracle 性能最高,保持windowsNT下的TPC-D和TPC-C的世界记录。
DB2 适用于数据仓库和在线事物处理性能较高。
5.客户端支持及应用模式SQL Server C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB ,ODBC连接.Oracle 多层次网络计算,支持多种工业标准,可以用ODBC, JDBC,OCI等网络客户连接DB2 跨平台,多层结构,支持ODBC,JDBC等客户6.操作简便SQL Server 操作简单,但只有图形界面.Oracle 较复杂, 同时提供GUI和命令行,在windowsNT和unix 下操作相同DB2 操作简单,同时提供GUI和命令行,在windowsNT和unix 下操作相同7.使用风险SQL server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。
DB2、Oracle、MySql数据库区别
DB2、Oracle、MySql数据库的不同1.oracle和db2在大多数的语法的使用上兼容性是比较好的,最大的区别还是在存储函数(存储过程)上有些不同;而MYSQL个人主要有自己的函数,并且数据库的表名区分大小写,而其他两个是不区分大小写的。
2.其次说下数据库就下的schema:Mysql这种方式很初级最容易被人想到,Database与User分开是跟其他两个的区别,用授权来关联用户和数据库。
jdbc的连接地址里面,三者分别指定了Database、User、User(&Schema),Db2如果不单独创建Schema则形式是跟Oracle一样的。
Db2的User只能是操作系统的用户,数据库本身不能创建用户,这点好像不太好,对于不同的应用系统,Mysql是创建不同的Database,Oracle是创建不同的User,这时Db2有两种方法,一是创建不同的操作系统用户,二是在User下创建不同的Schema,然后jdbc连接地址声明这个Schema。
就应用划分层面来说,三种数据库的Database、User、Schema在一个层面。
Oracle相比Mysql可以新建多个实例,一个实例等同于Mysql的一个进程,我的理解Oracle的创建实例就是创建database,会新建出一个oracleserver。
Db2的Database跟Oracle实例在一个层面,区别是Oracle创建实例比较麻烦,Db2一句话就执行完了。
Oracle的两个实例之间独立,Db2也是。
访问需要通过特定方式。
统一说来,1:Oracle的实例与Db2的数据库是一回事,应该被统一称作实例比较合适,而Mysql便是单实例模式2:应用划分层,三者分别是database、user、schema,统一称作database比较合适,真正的数据都在这一层。
从这里理解于是:用户名与密码的作用只是用来登陆,以及赋予对database的访问权限。
DB2和ORACLE的印象比较
一个项目需要DB2,以前没用过,用了WINDOWS 2008下的DB29.7 好几周,算入门了吧,下面这文章就当一个ORACLE使用者眼里的DB2的印象吧,也许有些东西可能有偏差,但是就是我自己的印象:
1、体系结构,DB2的实例和数据库分开的做法,我个人还是比较喜欢的,因为实例可以创建多个,数据库的恢复直接恢复到实例下就可以了,相对ORACLE简单多了。
17、再补充一点,DB2的在线文档有全中文的,快速入门什么的写得很不错,ORACLE这方面就差点了,不过想深入了解啥,还是要看E文。
18、DB2可是要许可证的呀,没有许可证,只能用90天,这个我觉得很不爽
8、DB2的远程网络连接采用的编目方式描述连接串的方式我感觉很不爽,为了改个客户端的连接服务器的IP地址,所有的客户端都需要将编目删除,然后重新编目连接地址,晕倒100多台PC机搞下来,尽管可以使用脚本,但是还是把人都快搞疯了。ORACLE采用的用文件来配置远程服务器的方式,所有的PC机都通过更新服务器直接更新本机的TNSNAME,1分钟搞定。
12、DB2的锁自动管理机制,我比较喜欢,打开后,互锁的概率大大降低,相同的程序,在DB2下锁明显少许多,但是不爽的是DB2的select命令也是加锁的。
13、DB2 9.7的ORACLE兼容模式,我也很喜欢,迁移麻烦少了许看要比ORACLE 要强一些,几乎所有的内存参数都能自动管理,ORACLE11G貌似也可以全部自动管理了。
4、DB2的命令执行方式,我很喜欢,可以在命令行上执行SQL,也可以在命令窗口上执行SQL,相对SQLPLUS灵活多了;
5、DB2的自动维护功能做的很好,可以定期自动整理数据库碎片和重建索引,唯一不大理想的是自动维护的备份功能不能指定压缩备份,相对而言ORACLE的自动维护功能就很一般了;
Oracle和DB2间基本架构和管理的差异
Oracle和DB2间基本架构和管理的差异1、简介当今IT的环境正经历着剧烈的变化,依靠单一的关系型数据库管理系统(RDBMS)管理数据的公司开始逐渐减少。
分析家的报告指出,今天超过90%的公司都拥有不只一种RDBMS。
在现在紧张的经济情况下,实际的需求正在挑战IT机构人员的工作极限。
一个公司为管理每种RDBMS而配备不同DBA的情况,越来越少见了。
今天的DBA必须跨平台管理不同的RDBMS,这是非常普通的事。
“58%的DBA被要求管理一种以上的数据库平台。
”―――来自: 的调查通常,一个DBA不但掌握基本的关系理论知识,同时具备一种专门的RDBMS经验。
数据库设计和管理的基本原理在所有RDBMS之间是相通的。
成为一名成功的跨平台的DBA,关键是掌握对术语的真正理解和不同RDBMS的细微差别。
本文将讨论多平台的Oracle和DB2 UDB之间的基本架构和管理的差异。
2、基本组件在不同平台之间,大部分的对象类型和功能是非常相似的,一些很重要差异是存储过程的使用方式和日志生成方式。
本文将详细讨论这些主题。
表1:基本数据库组件中的常用术语的差异3、产品选项当在安装任何一种数据库时,需要选择版本。
为了满足你的IT需求并做出正确的决定,了解各个数据库版本之间的差异是很重要的。
Oracle 10g:Enterprise Edition;Standard Edition;Express Edition。
企业版是使用最多的版本,如果你想使用OEM附加包,这个版本可以满足需要。
DB2 UDB for Linux/Unix/Windows(LUW) V 9.1:数据仓库版;企业服务器版(ESE);工作组版;简化版;个人版;通用开发版;个人开发版。
在DB2 UDB V 8.1之前,在公司环境方面你有两种选择:企业版(Enterprise Edition-EE)和扩展企业版(Extended Enterprise Edition-EEE)。
db2和oracle中character类型
db2和oracle中character类型【原创版】目录1.DB2 和 Oracle 的 Character 类型简介2.DB2 和 Oracle 的 Character 类型的区别3.DB2 和 Oracle 的 Character 类型的使用示例正文DB2 和 Oracle 都是关系型数据库管理系统,它们都提供 Character 类型来存储字符数据。
但是,两者在 Character 类型的实现上存在一些区别。
在 DB2 中,Character 类型用于存储单个字符。
它可以是字母、数字或符号。
Character 类型在 DB2 中是固定的长度,通常为 1 个字节。
在创建表时,可以指定 Character 类型的最大长度。
例如,可以创建一个名为"char_column"的表,其中包含一个 Character 类型的列,其最大长度为 255 个字符。
在 Oracle 中,Character 类型也是用于存储单个字符,但它可以是任何长度。
在创建表时,可以指定 Character 类型的最小和最大长度。
例如,可以创建一个名为"char_column"的表,其中包含一个 Character 类型的列,其长度在 1 到 255 个字符之间。
在 DB2 中,Character 类型的数据被存储为字节序列。
这意味着,如果使用 Character 类型存储一个字符,那么该字符将占用一个字节的空间。
在 Oracle 中,Character 类型的数据也被存储为字节序列。
但是,如果 Character 类型的列的长度小于 1 个字节,Oracle 将使用一个字节的空间来存储该数据。
在 DB2 和 Oracle 中,使用 Character 类型时需要注意一些事项。
例如,在 DB2 中,如果尝试在 Character 类型的列中存储一个超出其最大长度的字符,DB2 将返回一个错误。
oracle与db2的区别
oracle与db2的区别数据库2009-11-10 16:37:51 阅读877 评论0 字号:大中小订阅系统结构概述首先,我们需要理解Oracle 使用的架构,并理解它与DB2 的不同之处。
图1 展示了Oracle 的系统结构。
将该图与图2 进行比较,后者显示了DB2 的系统结构。
在阅读本文的时候,为便于理解,可以参照这两个图。
图1. Oracle on Linux, UNIX, and Windows Version 10.2 的系统结构图2. DB2 on Linux, UNIX, and Windows 系统结构回页首实例在Oracle 和DB2 中,实例的概念是类似的。
在这两者之中,实例都是指后台进程与共享内存的组合。
两者之间的主要差别在于,在Oracle 中每个实例只能有一个数据库,而在DB2 中多个数据库可以共享一个实例。
在Oracle 中,由于数据库与实例是一对一的关系,因此用CREATE DATABASE 命令创建一个数据库的同时便隐式地创建了一个实例。
或者,为了在计算机上创建一个Oracle 实例,也可以使用Database Configuration Assistant,或者使用ORADIM 实用程序,后者是Oracle 9i 通过NEW 选项提供的。
另外还必须提供某些信息,包括系统标识符(System Identifier,SID)或一个服务名称、实例密码、最大用户数、启动模式等等。
类似地,为了删除实例,可以使用ORADIM 实用程序加DELETE 选项。
这里需要提供SID 或服务名称。
除非在安装过程中创建一个新的数据库,否则在以fresh 方式安装Oracle 的时候,不会创建缺省的实例。
在DB2 中,当在Windows 平台上安装了该产品之后,便缺省地创建了一个实例"DB2"。
在Linux 和UNIX 中,缺省的实例名称为"db2inst1"。
db2的存储过程与ORACLE区别
db2的存储过程与ORACLE区别很大:(1) DB2中不支持”or replace”的语法;且参数名与IN/OUT的位置也需互换,声明变量时须使用declare关键字,为变量赋值时须使用set关键字。
(2)而对于oracle中的%TYPE的功能,DB2中好像还没有很好的实现方式。
(3)同样,oracle中清空表的命令truncate,DB2也不能原样引用,但它也提供了2种实现方式,一是将一空文件的内容导入表中import null.dat ;二是设置表的特性为不记录日志alter table tablename .但是第二种方式会在某些情况下导致原表无法使用,具体的还没弄清楚呢。
(4)至于sql语句表现不同应该就是oracle与db2各自的语法了。
比如说oracle的rownum,db2可以使用fetch first n only,或row_number() over()等。
DB2有更好的扩展性和性能。
Oracle触发器无法支持并行oracle 触发器例子:CREATE OR REPLACE TRIGGER CRM.T_SUB_USERINFO_AUR_NAME AFTER UPDATE OF STAFF_ NAMEON CRM.T_SUB_USERINFOREFERENCING OLD AS OLD NEW AS NEWFOR EACH ROWdeclarebeginif :NEW.STAFF_NAME!=:OLD.STAFF_NAME thenbegin客户投诉update T_COMPLAINT_MANAGE set SERVE_NAME=:NEW.STAFF_NAME where SERVE_SEED=: OLD.SEED;oracle 存储过程例子:create or replacePROCEDURE p_insert_t(v_x in NUMBER)IStemp_id number;BEGINFOR i IN 1..v_x LOOPselect SEQ_B_USER_ID.nextval into temp_id from dual;insert into buser (id, username, nickname, status, createdtime) values(temp_id, to_char(temp_id ), to_char(temp_id), 0, sysdate);END LOOP; END;--execute。
SQL,ORACLE,DB2三种数据库的比较
缺点:1:ORACLE一共发展了几代不同的产品,早期的产品,不是很稳定,并缺少事务处理这样的重要功能。2,其操作性相对其他两种产品较复杂。3,不是开源的,而且需付费使用。
B2以下几种优点。1,由于DB2追寻了ORACLE的产品所以它也具有主要应用于大型应用系统中,具有较好的可伸缩性,可支持从大等和ORACLE产品一样的优点。2,另外较其他两种产品, DB2还提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模应用程序的执行能力,具有与平台无关的基本功能和SL命令。3,DB2采用了数据分级技术,能够使大型机数据很方便地下载到LAN数据库服务器,使得客户机/服务器用户和基于LAN的应用程序可以访问大型机数据,并使数据库本地化及远程连接透明化。4, 它以拥有一个非常完备的查询优化器而著称,其外部连接改善了查询性能,并支持多任务并行查询。 5,DB2具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统尤为适用。 6,DB2也可跨平台运行。
,五脏俱全,即:对于小单位来说,MySL提供的功能已经绰绰有余。2,由于MySL是开放源码的,因此可以降低总体拥有成本。 可以说是一款性价比极高的产品。 缺点:1,正因为它小,也就限制了其功能的拓展,也就是说它功能有限。 ORACLE:
优点:1,因其复杂的关系数据库产品而闻名的ORACLE,它是世界领先的信息管理软件开发商,其使用范围相当广泛。2,处理速度快。3,经过长时间的研发,其安全性能较其他产品要强。4,伸缩性和并行性较强。5,完全支持所有的工业标准,采用完全开放策略。
缺点:1,配置文件和参数太多,而且名字很不规范。2,有些DB2产
DB2和Oracle的不同
DB2 ORACLE 常用函数异同TRANSLATE函数在二者的区别:oracle里:TRANSLATE(str1,str2,str3)以str3里对应的字段,替换str1中的str2字段。
例select TRANSLATE('12345bcdm','1234567abcdem','9999999xxxxxx') from dual ;结果显示: 99999xxxxselect TRANSLATE( '2011-01-01', ' 0123456789-','') from dual结果显示:nulldb2 里:TRANSLATE(str1,str2,str3)于oracle里刚好相反,以str2替换str3例select translate('012-38(3)','***','-()') from sysibm.SYSDUMMY1结果为:012*38*3*select TRANSLATE( '2011-01-01', '', ' 0123456789-' ) fromsysibm.SYSDUMMY1结果为 '' 即空串(不是null,上方oralce里第二个例子结果为null,因oracle 里没有空串)另:oracle里没有repeat函数。
db2里可以使用repeat('*',3)='***'decode函数decode函数在DB2不被支持,兼容的写法是采用case whenNVL函数nvl写法在DB2不被支持,兼容的写法是采用coalesceORACLE: select NVL(f_areaid,'空') from masa_user等同于 select coalesce(f_areaid,'空',f_areaid) from masa_userDB2: select coalesce(f_areaid,'空',f_areaid) from masa_usersubstr的不同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了。
db2与oracle区别
1、DB2 访问前10行数据与Oracle区别DB2 :select * from test fetch first 10 rows onlyOracle :select * from test where rownum<=10查询语句Db2:不提供隐形转换select * from employee where empno=1010;oracle:提供隐形转换select * from employee where empno='1010';2、DB2 Insert into 与Oracle区别DB2 允许有类似这样多行插入:insert into staff values(1212,'cemy',20,'sales',3,90000,30000);(1212,'cemy',20,'sales',3,90000,30000);oracle:SQL> insert into staff values(1212,'cemy',20,'sales',3,90000,30000),(1212,'cemy' ,20,'sales',3,90000,30000)3、DB2 Update 与Oracle区Db2DB2 update staff set (salary,comm)=(80000,50000);DB2 update staff set salary=80000,comm=50000;Oracle:SQL> update staff set salary=80000,comm=50000;已更新1 行。
I4、取得系统日期Oracle:Select sysdate from dual;DB2:Select current timestamp from sysibm.sysdummy1;5、转换日期时间到字符类型:OracleTO_CHAR(date_expression_r_r, 'YYYY-MM-DD')TO_CHAR(date_expression_r_r, 'HH24:MI:SS')DB2CHAR(date_expression_r_r,ISO)CHAR(time_expression_r_r,ISO)6、转换日期时间字符串到日期时间类型:OracleTO_CHAR(date_expression_r_r, 'YYYY-MM-DD')TO_CHAR(date_expression_r_r, 'HH24:MI:SS')DB2DATE('2005-05-20')TIME('18:59:59')TIEMSTAMP('2007-2-1', '21:12:12')TIEMSTAMP('2007-2-1 21:12:12')DB2也有TO_CHAR 和TO_DATE函数,但只能提供固定的转换格式,如下TO_CHAR (timestamp_expression_r_r,'YYY-MM-DD HH24:MI:SS')TO_DATE (string_expression_r_r, 'YYY-MM-DD HH24:MI:SS')7、快速清空大表Oracle:truncate table TableName ;DB2:alter table TableName active not logged initially with empty table;8、创建类似表Oracle:create table a as select * from b ;DB2:create table a like b ;9、修改字段长度或类型:ORACLE:ALTER TABLE NODES MODIFY NODE_NAME varchar(32);DB2:alter table NODES ALTER NODE_NAME SET DATA TYPE varchar(32);10、空值处理得到abcOracle:SELECT 'abc' || c1 FROM t1 (c1 IS NULL)DB2 :SELECT 'abc‘ || COALESCE(c1,'') FROM t111、创建indexesOralce:Create TABLE T1 .............IN DATA_TACreate Index ........ ON T1 ...... IN INDX_TSDB2:Create TABLE T1 ........ IN DATA_TS INDEX IN INDX_TSCreate INDEX .....ON T112、更改列名oracle :alter table test rename column mail to mail2;db2不提供更改列名功能(解决办法同删除,或者通过建立一个新视图解决)13、更改列类型oracle :alter table test modify column (mail2 integer);db2 :alter table test alter mail varchar(256) 只可以加宽,不能更改类型14 创建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 不能有空的括号变量定义和BEGIN END体的位置不同db2中变量定义在BEGIN END体内,并且每个变量都要用DECLARE声明;存储过程结束时,END后跟P1,并且不需要分号oracle中变量定义必须在BEGIN END体外,变量都不需要用DECLARE声明(有种说法是,第一个变量需要DECLARE,其他变量不需要);存储过程结束时,END后跟存储过程的名称,并且需要分号db2:CREATE PROCEDURE PRO1()LANGUAGE SQLP1: BEGIN--变量定义DECLARE INSERT_DATE TIMESTAMP;DECLARE ALLDEPT_NO VARCHAR(20);--具体操作SELECT a FROM TAB_1;.........END P1oracle:CREATE PROCEDURE PRO1IS--变量定义INSERT_DATE TIMESTAMP;ALLDEPT_NO VARCHAR(20);BEGIN--具体操作SELECT a FROM TAB_1;.........END PRO1;15、控制语句的不同db2:IF …THEN ......ELSEIF THEN .... END IF;oracle:IF …THEN ......ELSIF THEN .... END IF;16、如何执行脚本SQL文件Oracle:@$PATH/filename.sql;DB2:db2 -tvf $PATH/filename.sql17、查看当前用户的表和视图DB2:LIST TABLESORACLE:SELECT * FROM TAB;DB2:DROP TABLE删除表和定义。
DB2和Oracle的区别
DB2和Oracle的区别DB2数据库的简介:DB2是IBM公司的产品,起源于System R和System R*。
他支持从PC到UNIX,从中小型机到大型机;从IBM到非IBM(HP及SUN UNIX系统等)各种操作平台。
他既可以在主机上以主/从方式独立运行,也可以在客户/服务器环境中运行。
其中服务平台可以是OS/400,AIX,OS/2,HP-UNIX,SUN-Solaris等操作系统,客户机平台可以是OS/2或Windows, Dos, AIX, HP-UX, SUN Solaris等操作系统。
数据库服务器DB2数据库核心又称作DB2公共服务器,采用多进程多线索体系结构,可以运行于多种操作系统之上,并分别根据相应平台环境作了调整和优化,以便能够达到较好的性能。
DB2核心数据库的特色(1) 支持面向对象的编程DB2支持复杂的数据结构,如无结构文本对象,可以对无结构文本对象进行布尔匹配、最接近匹配和任意匹配等搜索。
可以建立用户数据类型和用户自定义函数。
(2) 支持多媒体应用程序DB2支持大二分对象(BLOB),允许在数据库中存取二进制大对象和文本大对象。
其中,二进制大对象可以用来存储多媒体对象。
(3) 备份和恢复能力(4) 支持存储过程和触发器,用户可以在建表时显示的定义复杂的完整性规则(5) 支持的硅SQL查询(6) 支持异构分布式数据库访问(7) 支持数据复制Oracle数据库的简介:Oracle Database,又名Oracle RDBMS,或简称Oracle。
是甲骨文公司的一款关系数据库管理系统。
到目前仍在数据库市场上占有主要份额。
Oracle数据库是一种大型数据库系统,一般应用于商业,政府部门,它的功能很强大,能够处理大批量的数据,在网络方面也用的非常多。
不过,一般的中小型企业都比较喜欢用SQL数据库系统,它的操作很简单,功能也非常齐全。
只是比较oracle数据库而言,在处理大量数据方面有些不如。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
db2与oracle差别1:并发机制Oracle的默认隔离级是快照(Snapshot),写入事务可不能堵塞读取事务,读取事务能够猎取当前已提交值。
DB2默认是游标稳固性(Cursor Stability),写入事务会堵塞读取事务。
2: 数据类型数据库的核心是数据,类型不匹配或者语义的不同都会阻碍应用是否能够同时在两种数据库中运行。
Oracle支持一些非SQL标准的数据类型,例如VARCHAR2,这些是不被D B2支持的;另外,Oracle中的日期、时刻格式和DB2中相应类型在语义上不完全一致;最后Oracle的PL/SQL储备过程所支持的一些标量数据类型在DB2中需要被映射才能被识别。
如右:3: 隐式类型转换Oracle使用弱类型转换,而DB2使用强类型转换。
隐式类型转换能完成一种类型向另外一种类型的自动转换,关于不匹配的类型,假如数据类型能被合明白得释,比较或者赋值时能够执行隐式类型转换;强类型转换规则,意味着字符串和数字类型之间不能直截了当进行比较,除非显式转换。
4:SQL方言DB2传统上坚持对SQL标准的支持,但Oracle实现了专门多方言。
例如:CONNEC T BY 递归语句、(+)连接操作符、DUAL表、ROWNUM伪列、ROWID伪列、MINUS 操作符、SELECT INTO FOR UPDATE语句、TRUNCATE TABLE等。
假如要在DB2数据库上运行使用了上述方言的应用,就需要进行代码级别的翻译,工作量较大。
5:PL/SQL语言就储备过程和函数开发而言,DB2使用SQL PL语言来开发,Oracle使用PL/SQL 语言来开发。
SQL PL和PL/SQL差异庞大,这也是从Oracle到DB2转型最大的工作量所在。
6:内置包为了方便应用程序开发的需要,Oracle数据库提供了专门多内置包:DBMS_OUTPUT、DBMS_SQL、DBMS_ALERT、DBMS_PIPE、DBMS_JOB、DBMS_LOB、DBMS_UTI LITY、UTL_FILE、UTL_MAIL和UTL_SMTP等。
使用了这些包的应用程序要想在DB2上运行,就需要在DB2中重新实现一遍,工作量庞大。
7:客户端编程接口Oracle和DB2针对不同的编程语言提供了不同的编程接口或者驱动,然而编程接口和驱动在语法上存在较大差异,而且在语义上也有一定区别。
例如,Oracle针对Java语言提供了JDBC扩展,这与DB2提供的驱动在语法上存在一定的差异;有些JDBC接口方法,像executeQuery方法,DB2只能通过那个方法执行查询操作,而Oracle除了查询外,还能够执行其他DML操作。
另外针对C语言,Oracle提供了OCI接口,而DB2提供了E CI接口,这两种接口的语法差别专门大。
8:框架ORACLE基于share-disk架构,DB2是share-nothing架构9:数据库事故复原能力Oracle和DB2都具备分割镜像备份功能。
只是,Oracle能够在数据库运行和磁盘写入的同时分割镜像。
而DB2镜像分割时必须挂起数据库I/O,因此操作过程中,数据库是不能写入的。
假如存档日志文件损坏,Oracle能够通过LogMiner工具翻阅损坏的日志文件,复原日志文件中记录的交易。
关于DB2来说,存档日志文件损坏意味着不仅特定日志文件中的交易全部丢失,而且损坏日志文件之后创建的存档日志文件也会丢失。
采纳Oracle的块级介质复原功能,当只有一个块损坏时,只是那个块需要复原,文件的其余部分,即含有那个块的表仍旧能够在线访问,从而提高了数据的可用性。
DB2不能以块为单位复原数据,因此需要将整个文件脱机、重建、复原。
10:并行机制Oracle可扩展的、并行决策支持战略以动态并行机制为核心。
这种方法能够实现完全透亮的并行,不需要静态表分区,大大减少了数据治理工作,最大限度地利用硬件的潜在能力。
O在racle用于数据爱护的分区选项中,也增加了分区间的并行处理支持,包括并行DML。
Oracle还支持每个分区内查询和插入的并行处理。
对比之下,IBM(DB2 UDB EEE)最初选择分区作为并行处理手段。
IBM提出了“UNION ALL”工作区的建议。
有味的是,IBM基于OS/390(Z/OS)的DB2却并未选择这种方法,而是采纳了Sysplex共享磁盘,分区(范畴)的方法只是用于治理。
11:分区分区能够将大型数据库结构(表、索引等)分解为比较小的,更加易于治理的结构单位,同时,能够提高查询的性能和资源利用率。
DB2仅支持散列分区方法,与Oracle分区方法相比存在专门大的局限性和明显的弱点。
由于只能进行散列分区,因此DB2不支持“滚动窗口”,就治理性而言,这是一种严峻的不足。
“滚动窗口”能够使规定期间的数据(如一周、一个月)连续地由最新数据在线替换旧数据。
DB2散列分区在加载新数据时,要求所有分区的数据重新分布,因此延长了加载时刻,降低了数据的可用性,因为数据重新分布过程中,表呈锁定状态。
同样,当旧数据存档或删除时会涉及到所有分区。
如此会干扰常规的插入操作,造成空间碎片。
DB2的另一个缺点是要求表与索引之间均衡分区。
这意味着,不能创建全局索引,包括分区的或非分区的。
关于通常需要采纳全局索引有效访问某个记录的OLAP环境来说,这是一个严峻的问题。
采纳DB2,应用设计人员无法灵活地定义在分区中的索引策略。
DB2分区方法存在的这些局限,使得治理大量数据的工作变得十分复杂。
在这方面,Oracle提供了丰富的选择方法,不仅提高了可治理性,而且改善了系统的性能。
12:数据加载与存档Oracle数据库10g采纳了Oracle数据泵(Data Pump),这是一种基于服务器的统一框架,可用于Oracle数据库系统之间快速传送批数据和元数据。
利用直截了当路径API,Oracle数据泵能够最快速地完成Oracle系统的数据加载和卸载。
Oracle数据泵是企业级服务器基础架构,具备加载和卸载全并行功能、重启功能和监控功能。
Oracle数据泵的所有接口全部外置,因此您能够编写自己的数据传送工具。
利用数据泵输出(Export)和输入(Import)工具,能够在目标平台上卸载或重新加载任何数据对象的子集。
假如在文件系统不同语法的平台间传送数据,现在能够改变某些对象输入时创建的定义,数据可不能发生丢失。
DB2输出功能一次仅承诺传送一个表的数据。
因此,假如模型中有20个表,就需要执行20次输出作业,一次完成一个表。
除白费时刻和人力外,还会由于表的依靠关系在不同时刻传送造成输出数据不一致。
因此,假如模型中含有ORDERS和ORDER_ITEMS两个表,由于ORDER_ITEMS在ORDERS表之后输出,ORDER_ITEMS的输出数据中可能含有ORDERS表的输出文件中不存在的项。
这种不一致会造成输出文件全然无法使用,因为如此的文件不能用来重建完全一致的数据快照。
而Oracle不仅能够让治理员在模型、表和数据库层输出数据,而且可在输出作业开始后,保证输出数据相关于时刻点的一致性,不必考虑给定表的输出时刻。
因此,在上例中,治理员只需执行一次作业,输出完整的模型,不必担忧输出数据显现不一致的问题。
第二,由于DB2输出文件不能提取某些表和模型属性,因此全然无法用来逻辑创建模型或数据库。
据“DB2数据传送指南与参考”介绍,DB2 输出不支持带有类型列的表单,不能保留参照完整性约束、检验约束、物理空间分配设置、默认列、外部关键字定义和触发器等属性。
同时,也不支持任何非表的其他数据库对象,如视图、储备过程等。
因此,与随时用来执行逻辑备份、重建模型或数据库的Oracle输出/输入工具不同,DB2工具仅用于表输入输出数据。
即使这种用途也不是随便能够执行,因为DB2输入不能用于重建LOB列定义大于1GB以上的表7。
Oracle SQL 加载器(Oracle SQL Loader)是另一种由外部文件向Oracle数据库表加载数据的有力工具。
与DB2 Load不同,SQL Loader能够在同一次加载会话中,将数据装入多个表,从而使采纳SQL函数操纵数据成为可能,数据在加载过程终止后能够进行访问。
这关于DB2来说是无法实现的,除非治理员备份表空间,启动完整性约束8。
除简单数据加载外,Oracle数据库10g还配备了成套服务器功能,可满足ETL处理要求(提取、转换、加载)。
采纳Oracle外部表功能,平面文件等外部源数据能够配置在数据库中,如同正常数据库表一样。
这些“外部表”可通过SQL存取。
如此,外部数据能够采纳SQL、PL/SQL和Java直截了当查询,并行装入数据库。
外部表在一个步骤中完成数据转换和装载,从而大大简化了ETL 处理过程。
DB2则需要采纳多个人工步骤。
DB2第一需要将外部数据装入“分级表”,然后进行SQL转换,最后才能进行处理。
因此,增加了DBA的工作量,延长了ETL的周期!13:相同的术语,不同的含义储备过程Oracle:它是用基于SQL的一种专门语言PL/SQL编写的,储备在数据库中的一个程序。
DB2:储备过程是一种最一般的程序,储备在数据库外部,并在数据库中注册,以标准编程语言编写,比如C,JAVA,COBOL等,DB2同样支持内部的储备过程,并提供了一种基于SQL 的专门的过程式语言。
包Oracle:一组PL/SQL语句块。
DB2:一种预编译的访问打算。
段(Segment)Oracle:是一个物理对象,比如表或索引。
DB2:表空间中的一组页面。
14:储备治理从逻辑观点上来看,Oracle有一个包含多个表空间的数据库,表空间包含多个段(表,索引,回滚等),还包括由多个数据库块组成的扩展(Extent)。
从物理意义上看,数据文件被分配给表空间,这些数据文件是由O/S块组成。
DB2有两种不同的分配方法来定义表空间。
它们一种是数据库治理的空间(DMS),另一种是系统治理的空间(SMS)。
依照顾用程序,它们各有优势:SMS(System Manages Space)---系统治理空间承诺操作系统依照需要为表分配空间。
不指定空间参数,这种方法关于储备治理来说专门容易。
关于较小的表或短时刻增长和收缩的表差不多上有利的。
DMS(Database Managed Space)---当表空间被创建时,数据库治理空间需要详细的空间说明。
通过表空间,储备空间能够赶忙被分配和保留。
15:缓冲池在Oracle中,缓冲池是在数据库启动文件init.ora中被定义的,那个文件能够动态地改变,它有下面的选项来定义不同的缓冲池:默认,循环,固定。
在DB2 LUW中,缓冲池是在数据库中定义的,并可创建为指定的页面大小:4K,8K,16K 或者32K,它们是通过DDL来定义的,不同的表空间被分配不同的缓冲池。