Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

mengubah kueri DB2 menjadi kueri Oracle

Anda memiliki banyak pekerjaan di depan!

Antara DB2 dan Oracle, beberapa perbedaan penting adalah (hanya enumerasi sewenang-wenang dari apa yang dapat saya pikirkan):

Jenis data

  • Tipe data angka:DB2 memiliki lebih banyak tipe standar, seperti SMALLINT , INTEGER , DOUBLE , dll. Itu tidak ada di Oracle SQL (walaupun beberapa ada di PL/SQL). Ini penting untuk DDL dan untuk casting dan beberapa kasus penggunaan lainnya, seperti ketepatan predikat
  • Tipe data tanggal:Satu-satunya perbedaan Oracle antara DATE dan TIMESTAMP adalah fakta bahwa TIMESTAMP memiliki mikrodetik. Tapi DATE juga dapat berisi informasi waktu. Di DB2, DATE tidak memiliki informasi waktu, saya pikir.
  • Tipe data karakter:Baca tentang perbedaan antara VARCHAR dan VARCHAR2 di Oracle
  • NULL . Di Oracle, NULL jauh lebih umum daripada di DB2. Sebelum DB2 v9.7, Anda harus menggunakan NULL ke tipe eksplisit apa pun, mis. cast(null as integer) . Itu tidak perlu di Oracle.

Objek sistem

  • SYSIBM.DUAL menjadi DUAL
  • Fungsi:Semuanya sedikit berbeda. Anda harus memeriksa kasus per kasus. Misalnya, LOCATE menjadi INSTR

Sintaks

  • TRUNCATE IMMEDIATE menjadi TRUNCATE
  • EXCEPT menjadi MINUS
  • KHUSUS DB2 FETCH FIRST n ROWS ONLY :Tidak ada klausa seperti itu di Oracle. Anda harus menggunakan ROWNUM atau ROW_NUMBER() OVER() pemfilteran (lihat contoh ini )
  • MERGE DB2 pernyataan lebih kuat daripada Oracle, jika Anda menggunakan ini.
  • DB2 mendukung INSERT INTO .. (..) VALUES (..), (..), (..) . Dengan Oracle, Anda harus menulis INSERT INTO .. SELECT .. UNION ALL SELECT .. UNION ALL SELECT ..

Lanjutan

  • Jika Anda menggunakan prosedur tersimpan, prosedur tersebut bekerja sedikit berbeda, terutama dengan tipe data lanjutan yang terlibat, tetapi itu di luar cakupan di sini.

Tembakan Anda yang paling efisien dalam hal ini mungkin menggunakan semacam abstraksi SQL. Jika Anda menggunakan Java, saya sarankan Anda membungkus pernyataan SQL Anda dengan jOOQ (Penafian:Saya bekerja untuk perusahaan di belakang jOOQ). jOOQ menyediakan abstraksi tingkat API untuk semua fakta di atas. Banyak SQL dapat dieksekusi baik pada DB2 dan Oracle, tanpa adaptasi. Kami juga sedang mengerjakan produk penerjemah yang lebih independen:https://www.jooq.org/translate

Pada tingkat abstraksi yang lebih tinggi, Hibernate (atau implementasi JPA lainnya) dapat melakukan hal yang sama untuk Anda



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00907 saat mencoba membuat batasan CHECK

  2. kesalahan:ORA-65096:nama pengguna atau peran umum yang tidak valid di Oracle

  3. Memasukkan karakter nasional ke dalam kolom Oracle NCHAR atau NVARCHAR tidak berfungsi

  4. cara menulis kueri sql untuk memilih baris dengan nilai maksimal dalam satu kolom

  5. Kesalahan Keluaran Fiddle SQL