dmewy 发表于 2013-1-25 22:38:27

今天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 (ADDATTIMESTAMP(3)   NULL );
          DB2中只能寫成CREATE TABLE STORE (ADDATTIMESTAMP );
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
BEGINATOMIC
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_IDX1ON VENDOR(CORPMEMID, MEMCD)NOLOGGING;
DB2.index:
CREATE INDEX VENDOR_IDX1ON VENDOR(CORPMEMID, MEMCD) ;


暫時遇到這么多.有不對的希望指正.
页: [1]
查看完整版本: 今天Oracle轉DB2遇到的一些sql問題