2008-04-24
今天Oracle轉DB2遇到的一些sql問題
以下內容是今天dash_oracle.1.1.sql 遇到的問題.
字段方面:
1: Oracle中的varchar2 在DB2中沒有,DB2中用VARCHAR代替.
2: Oracle中的字段如果可以為NULL.可以寫成NULL.DB2中如果可以為NULL,則不寫.如果寫NULL 會報錯.
3: Oracle中的TIMESTAMP字段可以用(int,int)限制長度.DB2中不能限制.
eg: Oracle中可以寫CREATE TABLE STORE (ADDAT TIMESTAMP(3) NULL );
DB2中只能寫成CREATE TABLE STORE (ADDAT TIMESTAMP );
4: 如果往Oracle中添加日期類型數據.需要用TO_DATE()函數來添加數據.DB2不需要.如果在DB2中想添加日期類型的數據.只需要把日期按照格式
寫成字符串就OK了.
eg: INSERT INTO STORE(XXX) VALUES('2002-04-17 12:20:35' ); 秒數後面可以再跟毫秒數.
Ps: DATE類型只保存年月日.并不保存時分秒.如果需要添加時分秒,必須把字段類型設置為TIMESTAMP.
5: Oracle中的NUMBER(int,int)對應到DB2中為DECIMAL(int,int)類型.
6: oracle中的to_char(a.SaleDate,'DD') 转换DB2: (1)RIGHT(RTRIM(CHAR(100+DAY(a.SaleDate))),2) (2)SUBSTR(CHAR(a.SaleDate),9,2)
Trigger方面:
1: DB2中Trigger的name長度不能大於18
2: DB2中的Trigger 格式要求比較嚴格.
eg:
Oracle.trigger:
CREATE TRIGGER TRANLOG_I_BACKUP after insert
on TRANLOG for each row
BEGIN
insert into TRANLOG_LOG
values(:new.CORPMEMID, :new.SETTYPE, :new.STARTDATE, :new.STOPDATE, :new.LASTTIME, :new.LASTDESC, :new.ADDBY, :new.ADDAT, :new.UPDBY, :new.UPDAT , 'I', current_timestamp);
end;
DB2.trigger:
CREATE TRIGGER TRANLOG_I_BACKUP after insert
on TRANLOG REFERENCING NEW AS new for each row MODE DB2SQL
BEGIN ATOMIC
insert into TRANLOG_LOG
values(new.CORPMEMID, new.SETTYPE, new.STARTDATE, new.STOPDATE, new.LASTTIME, new.LASTDESC, new.ADDBY, new.ADDAT, new.UPDBY, new.UPDAT , 'I', current timestamp);
end;
Index方面:
1: Oracle中的index結尾可以加 NOLOGGING.DB2不行.
eg:
Oracle.index:
CREATE INDEX VENDOR_IDX1 ON VENDOR(CORPMEMID, MEMCD) NOLOGGING;
DB2.index:
CREATE INDEX VENDOR_IDX1 ON VENDOR(CORPMEMID, MEMCD) ;
暫時遇到這么多.有不對的希望指正.
字段方面:
1: Oracle中的varchar2 在DB2中沒有,DB2中用VARCHAR代替.
2: Oracle中的字段如果可以為NULL.可以寫成NULL.DB2中如果可以為NULL,則不寫.如果寫NULL 會報錯.
3: Oracle中的TIMESTAMP字段可以用(int,int)限制長度.DB2中不能限制.
eg: Oracle中可以寫CREATE TABLE STORE (ADDAT TIMESTAMP(3) NULL );
DB2中只能寫成CREATE TABLE STORE (ADDAT TIMESTAMP );
4: 如果往Oracle中添加日期類型數據.需要用TO_DATE()函數來添加數據.DB2不需要.如果在DB2中想添加日期類型的數據.只需要把日期按照格式
寫成字符串就OK了.
eg: INSERT INTO STORE(XXX) VALUES('2002-04-17 12:20:35' ); 秒數後面可以再跟毫秒數.
Ps: DATE類型只保存年月日.并不保存時分秒.如果需要添加時分秒,必須把字段類型設置為TIMESTAMP.
5: Oracle中的NUMBER(int,int)對應到DB2中為DECIMAL(int,int)類型.
6: oracle中的to_char(a.SaleDate,'DD') 转换DB2: (1)RIGHT(RTRIM(CHAR(100+DAY(a.SaleDate))),2) (2)SUBSTR(CHAR(a.SaleDate),9,2)
Trigger方面:
1: DB2中Trigger的name長度不能大於18
2: DB2中的Trigger 格式要求比較嚴格.
eg:
Oracle.trigger:
CREATE TRIGGER TRANLOG_I_BACKUP after insert
on TRANLOG for each row
BEGIN
insert into TRANLOG_LOG
values(:new.CORPMEMID, :new.SETTYPE, :new.STARTDATE, :new.STOPDATE, :new.LASTTIME, :new.LASTDESC, :new.ADDBY, :new.ADDAT, :new.UPDBY, :new.UPDAT , 'I', current_timestamp);
end;
DB2.trigger:
CREATE TRIGGER TRANLOG_I_BACKUP after insert
on TRANLOG REFERENCING NEW AS new for each row MODE DB2SQL
BEGIN ATOMIC
insert into TRANLOG_LOG
values(new.CORPMEMID, new.SETTYPE, new.STARTDATE, new.STOPDATE, new.LASTTIME, new.LASTDESC, new.ADDBY, new.ADDAT, new.UPDBY, new.UPDAT , 'I', current timestamp);
end;
Index方面:
1: Oracle中的index結尾可以加 NOLOGGING.DB2不行.
eg:
Oracle.index:
CREATE INDEX VENDOR_IDX1 ON VENDOR(CORPMEMID, MEMCD) NOLOGGING;
DB2.index:
CREATE INDEX VENDOR_IDX1 ON VENDOR(CORPMEMID, MEMCD) ;
暫時遇到這么多.有不對的希望指正.
发表评论
- 浏览: 11615 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最新评论
-
MyEclipse WebSphere 6.1 ...
呵呵..谢谢..
-- by xiecailian -
[转载]与大学生谈软件外 ...
算不错的文章。不过咱们国内可有不少痴迷于高新软件技术的。让他们从框的死死的地方做 ...
-- by 魔力猫咪 -
超经典的主外键表的连接( ...
我正在找这个东西,太感谢了,使用的时候就遇到主外键约束出问题。 我的*.hbm. ...
-- by 56553655 -
超经典的主外键表的连接( ...
MySQL数据库版: create table dep(depid int au ...
-- by 56553655 -
超经典的主外键表的连接( ...
想你是西安的吧
-- by laowang_27@hotmail.com






评论排行榜