Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

chuyển đổi một truy vấn DB2 thành truy vấn oracle

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 DATETIMESTAMP thực tế là TIMESTAMP có micro giây. Nhưng DATE 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 VARCHARVARCHAR2 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ền NULL 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ành DUAL
  • 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ành INSTR

Cú pháp

  • TRUNCATE IMMEDIATE trở thành TRUNCATE
  • EXCEPT trở thành MINUS
  • FETCH FIRST n ROWS ONLY :Không có mệnh đề này trong Oracle. Bạn sẽ phải sử dụng ROWNUM hoặc ROW_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ết INSERT 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu sự khác biệt giữa Bảng và API Giao dịch

  2. tìm nạp tên bảng từ một cột cho mệnh đề from

  3. Oracle SEQUENCE - 'tăng dần theo' và 'bộ nhớ đệm'

  4. Cách gọi thủ tục được lưu trữ của Oracle trả về con trỏ tham chiếu

  5. Hàm CHR () trong Oracle