DB2专用寄存器
values(currentdate)
values(currentrefresh age)
values(currentdefaulttransformgroup)
values(currentschema)
values(currentdegreecurrentserver)
values(currentexplainmode)
values(currenttime)
values(currentexplain snapshot)
values(currenttimestamp)
values(currentnode)
values(currenttimezone)
values(currentpathuser)
values(currentquery optimization)
DB2临时表定义规则
declare global temporary table session.templ --定义临时表templ
like employee--定义临时表类型与employee表名类似
on commit preserve rows--定义当数据提交后写入临时表
not logged--不记录历史
in mytempspace--定义表空间
与Oracle区别在与create declare
具体语法可以参考官方:
应用举例:
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*fromtestfetchfirst10rows 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类似语法
如:existscase when in
DB2 With as语法与Oracle区别
DB2WITH TMP_MON(MON) --(MON)必须加上否则会有错误
AS (VALUES 1,2,3,4,5,6,7,8,9,10,11,12) SELECT * FROM TMP_MON
如:WITH TMP_MONAS (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] SQL0153NThe statement does not include a required column list.SQLSTATE=42908
Oraclewith 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:显式指明不释放数据表和索引的空间[@more@]
据说 DB2 V9.7 开始与ORACLE语法兼容。ITPUB 上也有人开始研究。
我这里是项目用的DB2V9.5版本还是有很多不同,简单记录在这里备忘
本文详细比较了DB2与Oracle在专用寄存器、临时表定义、数据查询、插入、更新、合并查询等方面的语法差异。DB2支持INTERSECT、EXCEPT和UNION操作,并提供了与Oracle类似的多行插入功能,但存在一些细微区别。在更新语法中,DB2允许直接设置多个字段,而Oracle则需要使用子查询。此外,DB2的截断操作与Oracle的TRUNCATE命令有不同选项。文章还探讨了DB2的WITH AS语法与Oracle的差异。

8872

被折叠的 条评论
为什么被折叠?



