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

Penanganan DML dan Pengecualian - Oracle

Anda melewatkan beberapa bagian lain dari buku ini. Ya, Steven benar – jika pengecualian terjadi di blok, semua efek DML sebelumnya tetap ada. Namun, harus ada penyebutan lain dalam buku bahwa setiap eksekusi SQL atau PL/SQL tingkat atas (yaitu, blok anonim juga) akan membuka kursor untuk pernyataan itu dan jika ada pengecualian selama eksekusi kursor, semua efek DML selesai selama eksekusi kursor digulung kembali. Mungkin contoh sederhana akan memberi Anda petunjuk...

Dalam contoh asli Anda, Anda mengeksekusi ...

BEGIN
    DELETE FROM dml_exception;
    raise value_error;
END;

... sebagai pernyataan tingkat atas. Ya, di akhir blok, meskipun masih di dalam, delete efek tetap di tempatnya. Namun, blok Anda memunculkan pengecualian yang disebarkan sampai ke kursor tingkat atas. Jadi, untuk mematuhi prinsip-prinsip atomicity , Oracle mengembalikan semua efek tertunda dari kursor yang dibuka.

Jika Anda memanggil blok PL/SQL Anda dari dalam blok PL/SQL tingkat atas lainnya, yang menangani dan tidak menaikkan kembali pengecualian yang muncul di blok PL/SQL tingkat bawah, ...

BEGIN
    BEGIN
        DELETE FROM dml_exception;
        raise value_error;
    END;
EXCEPTION
    WHEN others THEN NULL;
END;

..., lalu delete efek akan tetap di tempatnya. (Dan karena tidak ada komit di blok itu, Anda akhirnya memiliki transaksi yang sedang berlangsung.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembangkan pada instance Oracle lokal

  2. Bagaimana cara memanggil nomor urut database Oracle dengan menggunakan MyBatis?

  3. Saya telah menjalankan json_object di Oracle 12.1.0.2 dan dikatakan error . mengapa?

  4. Metode alternatif ke tabel temp global untuk Oracle Stored Procedure

  5. Prosedur tersimpan Oracle menerima parameter array(tabel) dalam contoh paket yang diperlukan