Bạn còn rất nhiều việc ở phía trước!
Giữa DB2 và Oracle, một số khác biệt quan trọng là (chỉ là sự liệt kê tùy ý những gì tôi có thể nghĩ đến):
Loại dữ liệu
- Các kiểu dữ liệu số:DB2 có nhiều kiểu tiêu chuẩn hơn, chẳng hạn như
SMALLINT
,INTEGER
,DOUBLE
, v.v. Chúng không tồn tại trong Oracle SQL (mặc dù một số tồn tại trong PL / SQL). Điều này quan trọng đối với DDL và đối với việc truyền và một số trường hợp sử dụng khác, chẳng hạn như tính đúng đắn của các vị từ - Kiểu dữ liệu ngày:Sự khác biệt duy nhất của Oracle giữa
DATE
vàTIMESTAMP
thực tế làTIMESTAMP
có micro giây. NhưngDATE
cũng có thể chứa thông tin thời gian. Trong DB2,DATE
Tôi nghĩ là không có thông tin về thời gian. - Kiểu dữ liệu ký tự:Đọc về sự khác biệt giữa
VARCHAR
vàVARCHAR2
trong Oracle -
NULL
. Trong Oracle,NULL
tổng quát hơn nhiều so với trong DB2. Trước DB2 v9.7, bạn phải truyềnNULL
cho bất kỳ loại rõ ràng nào, ví dụ:cast(null as integer)
. Điều đó không cần thiết trong Oracle.
Đối tượng hệ thống
-
SYSIBM.DUAL
đơn giản trở thànhDUAL
- Chức năng:Tất cả chúng đều khác nhau một chút. Bạn sẽ phải kiểm tra từng trường hợp một. Ví dụ:
LOCATE
trở thànhINSTR
Cú pháp
-
TRUNCATE IMMEDIATE
trở thànhTRUNCATE
-
EXCEPT
trở thànhMINUS
-
FETCH FIRST n ROWS ONLY
:Không có mệnh đề này trong Oracle. Bạn sẽ phải sử dụngROWNUM
hoặcROW_NUMBER() OVER()
lọc (xem ví dụ này ) -
MERGE
của DB2 tuyên bố mạnh hơn Oracle, trong trường hợp bạn sử dụng câu lệnh này. - DB2 hỗ trợ
INSERT INTO .. (..) VALUES (..), (..), (..)
. Với Oracle, bạn phải viếtINSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..
Nâng cao
- Nếu bạn sử dụng các thủ tục được lưu trữ, chúng hoạt động hơi khác một chút, đặc biệt là với các loại dữ liệu nâng cao liên quan, nhưng điều đó nằm ngoài phạm vi ở đây.
Biện pháp hiệu quả nhất của bạn ở đây có thể là sử dụng một số kiểu trừu tượng SQL. Nếu bạn đang sử dụng Java, tôi khuyên bạn nên kết hợp các câu lệnh SQL của mình bằng jOOQ (Tuyên bố từ chối trách nhiệm:Tôi làm việc cho công ty đứng sau jOOQ). jOOQ cung cấp tính trừu tượng cấp API cho tất cả các dữ kiện trên. Rất nhiều SQL có thể được thực thi trên cả DB2 và Oracle mà không cần phải thích ứng. Chúng tôi cũng đang nghiên cứu sản phẩm phiên dịch độc lập hơn: https://www.jooq.org/translate
Ở cấp độ trừu tượng cao hơn, Hibernate (hoặc các triển khai JPA khác) có thể làm điều tương tự cho bạn