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

Memicu kesalahan pernyataan if-else tidak dimunculkan

Pemicu berfungsi seperti yang Anda harapkan saat Anda memperbarui tabel secara manual.

Saat dipanggil dari prosedur, pemicu tidak melaporkan jumlah yang tidak valid, dan menunjukkan jumlah penuh sebagai pembayaran meskipun tidak - jumlah pembayaran tidak berubah tetapi kolom lainnya.

Itu karena pernyataan pembaruan prosedur Anda adalah:

UPDATE Payment
SET paymenttype = PAYMENT_TYPE,
  paymentdate = TO_CHAR(sysdate,'DD/MON/YYYY'),
  paymentstatus = v_paymentstatus
where paymentid = PAYMENT_ID;

Anda tidak menyuruhnya untuk memperbarui jumlahnya, jadi pemicunya tidak memiliki :new . yang dimodifikasi nilai - yang lama dan yang baru adalah sama. Anda harus menyertakan kolom itu dalam pembaruan:

UPDATE Payment
SET paymenttype = PAYMENT_TYPE,
  paymentdate = TO_CHAR(sysdate,'DD/MON/YYYY'),
  paymentamount = amt_pay,
  paymentstatus = v_paymentstatus
where paymentid = PAYMENT_ID;

db<>biola

TO_CHAR(sysdate,'DD/MON/YYYY') terlihat aneh - kolom tabel harus berupa tanggal bukan string, jadi Anda tidak boleh mengonversi nilai tersebut menjadi string; jika kolomnya adalah tanggal maka Anda mengandalkan pengaturan NLS klien untuk mengubahnya kembali. Jika Anda mencoba mengabaikan waktu saat ini, Anda dapat melakukan TRUNC(sysdate) sebagai gantinya.

Anda juga tidak boleh mengandalkan dbms_output di badan prosedur - Anda tidak dapat mengontrol apakah seseorang yang memanggil ini memiliki keluaran yang diaktifkan sehingga mereka mungkin tidak pernah melihat masalah. Saat Anda memunculkan pengecualian di pemicu, Anda bisa melakukan hal yang sama dalam prosedur untuk kesalahan lainnya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pangkas bidang tanggal di mysql seperti Oracle

  2. ORACLE (11.2.0.1.0) - CTE rekursif dengan ekspresi tanggal

  3. Bagaimana memanggil prosedur tersimpan oracle di Codeigniter

  4. excel ke Oracle db menggunakan VS 2005 C #

  5. kueri sql untuk membandingkan hasil kueri berikut