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

Kembalikan dalam Pengecualian PLSQL

Pertama, saya berasumsi kita dapat mengabaikan kesalahan sintaks (misalnya, tidak ada END LOOP , dbms_output.put_line panggilan kehilangan kutipan tunggal pertama, dll.)

Mengenai apakah perlu untuk mengembalikan perubahan, itu tergantung.

Secara umum, Anda tidak akan memiliki komit sementara dalam satu lingkaran. Itu umumnya arsitektur yang buruk karena jauh lebih mahal dalam hal I/O dan waktu yang telah berlalu. Itu juga membuat lebih sulit untuk menulis kode yang dapat dimulai ulang. Apa yang terjadi, misalnya, jika SELECT . Anda pernyataan memilih 10 baris, Anda mengeluarkan (dan melakukan) 5 pembaruan, dan kemudian pembaruan ke-6 gagal? Satu-satunya cara untuk dapat memulai kembali dengan baris ke-6 setelah Anda memperbaiki pengecualian adalah dengan memiliki tabel terpisah tempat Anda menyimpan (dan memperbarui) kemajuan kode Anda. Ini juga menciptakan masalah untuk kode apa pun yang memanggil blok ini yang kemudian harus menangani kasus bahwa separuh pekerjaan telah selesai (dan dilakukan) dan separuh lainnya tidak.

Secara umum, Anda hanya akan menempatkan pernyataan kontrol transaksi di blok terluar dari kode Anda. Sejak COMMIT atau ROLLBACK dalam prosedur melakukan atau mengembalikan pekerjaan apa pun yang dilakukan dalam sesi apakah itu dilakukan oleh prosedur atau tidak, Anda ingin sangat berhati-hati dalam menambahkan pernyataan kontrol transaksi. Anda biasanya ingin membiarkan penelepon membuat keputusan tentang apakah akan melakukan atau memutar kembali. Tentu saja, itu hanya sejauh ini-- pada akhirnya, Anda akan berada di blok terluar yang tidak akan pernah dipanggil dari rutinitas lain dan Anda perlu memiliki kontrol transaksi yang sesuai-- tetapi itu adalah sesuatu yang harus sangat diwaspadai tentang apakah Anda sedang menulis kode yang mungkin digunakan kembali.

Dalam hal ini, karena Anda memiliki komitmen sementara, satu-satunya efek ROLLBACK . Anda jika pernyataan pembaruan pertama gagal, pekerjaan yang telah dilakukan di sesi Anda sebelum memanggil blok ini akan dibatalkan. Komit sementara akan melakukan perubahan sebelumnya jika pernyataan pembaruan pertama berhasil. Itulah jenis efek samping yang dikhawatirkan orang ketika mereka berbicara tentang mengapa komitmen sementara dan kontrol transaksi di blok yang dapat digunakan kembali bermasalah.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggunakan nama partisi sebagai parameter dalam pernyataan pilih?

  2. PHP &Oracle - oci_connect() ORA-12705:Tidak dapat mengakses file data NLS

  3. Bagaimana cara mengaitkan pengguna ke beberapa skema database?

  4. Cara Mengonversi Desimal ke Heksadesimal menggunakan TO_CHAR() di Oracle

  5. Pindahkan data dari oracle ke HDFS, proses dan pindahkan ke Teradata dari HDFS