ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle 与DB2 区别

Oracle 与DB2 区别

原创 Linux操作系统 作者:xsmdel 时间:2010-09-28 16:33:35 0 删除 编辑
记得以前有人写过oracle 与DB2 优势在哪里。

我这里也来一篇,因为最近项目的原因在用到DB2 刚刚整理出一篇

DB2 专用寄存器
values(current date)                              
values(current refresh age)                        
values(current default transform. group)            
values(current schema)                             
values(current degree current server)              
values(current explain mode)                       
values(current time)                              
values(current explain snapshot)                  
values(current timestamp)                          
values(current node)                              
values(current timezone)                           
values(current path user)                          
values(current query optimization)
1.以上在编辑器里只有使用values 来获取值,类似于Oracle dul
2.取系统当前时间DB2 没有 sysdate

DB2 临时表定义规则 与Oracle区别
declare global temporary table session.templ --定义临时表templ
  like employee    --定义临时表类型与 employee表名类似
  on commit preserve rows  --定义当数据提交后写入临时表
  not logged    --不记录历史
  in mytempspace  --定义表空间   

与Oracle区别在与create \declare
具体语法可以参考官方:http://publib.boulder.ibm.com/in ... /admin/r0003272.htm
应用举例:
declare global temporary table session.templ --定义临时表templ
  like a    --定义临时表类型与 employee表名类似
  on commit preserve rows  --定义当数据提交后写入临时表;与Oracle一致的
  not logged    --不记录历史
  in test  --定义表空间  
        
declare global temporary table session.test --定义临时表templ
  like a    --定义临时表类型与 employee表名类似
  on commit delete rows  --数据在 Transaction 期间有效,一旦COMMIT后,数据就被自动 TRUNCATE 掉了;与Oracle一致的
  not logged    --不记录历史
  in test  --定义表空间  

DB2 访问前10行数据与Oracle区别
DB2 -- select * from test fetch first 10 rows only
Oracle -- select * from test where rownum<=10

DB2 Insert into 与Oracle区别
DB2 允许有类似这样多行插入 insert into staff values(1212,'cemy',20,'sales',3,90000,30000),
                                                   (1212,'cemy',20,'sales',3,90000,30000);

举例:
SQL> insert into staff values(1212,'cemy',20,'sales',3,90000,30000);
已创建 1 行。
SQL> insert into staff values(1212,'cemy',20,'sales',3,90000,30000),(1212,'cemy'
,20,'sales',3,90000,30000);
insert into staff values(1212,'cemy',20,'sales',3,90000,30000),(1212,'cemy',20,'
sales',3,90000,30000)                                                             *
第 1 行出现错误:
ORA-00933: SQL 命令未正确结束

DB2 Update 与Oracle区别
DB2 update staff set (salary,comm)=(80000,50000);
DB2 update staff set salary=80000,comm=50000;

举例:
SQL> update staff set (salary,comm)=(80000,50000);
update staff set (salary,comm)=(80000,50000)                              *
第 1 行出现错误:
ORA-01767: UPDATE ...SET 表达式必须是子查询
SQL> update staff set salary=80000,comm=50000;
已更新 1 行。


DB2 合并查询 与Oracle区别

DB2 INTERSECT、EXCEPT、UNION集合操作测试
说明:DB2支持三种集合操作INTERSECT(交集)、EXCEPT(差集)、UNION(合集),在ORACLE等数据库里面也有类似的操作,但是细微的地方可能有些差别,现在专门测试一下,以求准确!玩数据千万要细心啊,否则会带来难以意料的结果,呵呵!
测试环境:

DROP TABLE  AA_WEEK;
CREATE TABLE AA_WEEK(
CODE SMALLINT NOT NULL,
EN_NAME VARCHAR(20) NOT NULL,
ABB VARCHAR(20),
CONSTRAINT P_AA_WEEK_CODE PRIMARY KEY (CODE)
);
COMMENT ON TABLE AA_WEEK IS
'星期';
COMMENT ON AA_WEEK
(CODE IS '星期代码',
  EN_NAME IS '英文星期名',
  ABB IS '英文缩写'
);
INSERT INTO AA_WEEK VALUES
(1,'Monday','Mon'),
(2,'Tuesday','Tues'),
(3,'Wednesday','Wed'),
(4,'Thursday','Thurs'),
(5,'Friday','Friday'),
(6,'Saturday','Sat'),
(7,'Sunday','Sun');
COMMIT;

查询一把,看看所有数据:
SELECT * FROM AA_WEEK;
+------+-----------+--------+
| CODE | EN_NAME   | ABB    |
+------+-----------+--------+
|    1 | Monday    | Mon    |
|    2 | Tuesday   | Tues   |
|    3 | Wednesday | Wed    |
|    4 | Thursday  | Thurs  |
|    5 | Friday    | Friday |
|    6 | Saturday  | Sat    |
|    7 | Sunday    | Sun    |
+------+-----------+--------+


一、交集运算:INTERSECT、INTERSECT ALL

-- 求交集:A交B 貌似Oracle没有求交集,项目暂时还没有留意到
SELECT * FROM AA_WEEK X WHERE X.CODE IN (1,2,3) -- 集合A
INTERSECT                                       -- 集合B
SELECT * FROM AA_WEEK X WHERE X.CODE IN (2,3,4);
---------------------------------
2       'Tuesday'       'Tues'
3       'Wednesday'     'Wed'

说明:INTERSECT和INTERSECT ALL是等效的。

二、差集运算:EXCEPT、EXCEPT ALL 与Oracle 的minus 一致

-- 求差集:A减B
SELECT * FROM AA_WEEK X WHERE X.CODE IN (1,2,3) -- 集合A
EXCEPT                                          -- 集合B
SELECT * FROM AA_WEEK w WHERE w.CODE IN (2,3,4);         

说明:EXCEPT和EXCEPT ALL是等效的。
---------------------------------
1       'Monday'        'Mon'

三、合集运算 UNION 、UNION ALL 与Oracle时等效的

DB2 与 Oracle 类似语法
如:exists\case when \in

DB2 With as语法 与Oracle区别
DB2   WITH TMP_MON(MON) --(MON) 必须加上否则会有错误
        AS (VALUES 1,2,3,4,5,6,7,8,9,10,11,12) SELECT * FROM TMP_MON
如: WITH TMP_MON  AS (VALUES 1,2,3,4,5,6,7,8,9,10,11,12)
SELECT * FROM TMP_MON
DB2 Database Error: ERROR [42908] [IBM][DB2/NT64] SQL0153N  The statement does not include a required column list.  SQLSTATE=42908

Oracle  with a as (select * from test)
           select * from a;
Oracle其实就是把一大堆重复用到的SQL语句放在with as 里面,取一个别名,后面的查询就可以用它
这样对于大批量的SQL语句起到一个优化的作用,而且清楚明了

DB2 截断 与Oracle truncate区别
DB2:  ALTER TABLE TEST ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE
Oracle:  truncate table
Truncate语法:TRUNCATE TABLE name [DROP/REUSE STORAGE]   
DROP STORAGE:显式指明释放数据表和索引的空间   
REUSE STORAGE:显式指明不释放数据表和索引的空间

欢迎补充 ,哈哈

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13159425/viewspace-675033/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-03-29

  • 博文量
    52
  • 访问量
    147266