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

kesalahan pemicu tidak valid

Ok saya akan memposting ini sebagai jawaban karena komentar tidak akan mengizinkan teks sebanyak ini.

Melihat tabel Anda beberapa hal masih belum jelas. fungsi Anda ADD_PACIENTE_QUARTO mengimplementasikan SELECT pernyataan yang menyatakan predikat Where PAC = CONT tapi PAC tidak ada dalam PACIENTE 's spesifikasi melainkan variabel lokal tempat Anda menyimpan hasil Anda dan CONT adalah parameter Anda, tidak jelas apa yang Anda coba di sana.

Sekarang pemicu Anda memiliki beberapa kelemahan dalam logika dan implementasi.

Pertama-tama, nama pemicu Anda adalah PACIENTE_TRIGGER tapi baris INSERT OR UPDATE ON TIPO_QUARTO memberitahu saya itu ada di TIPO_QUARTO tabel, ini bukan masalah secara sintaksis, tetapi secara logis dapat menyusahkan bagi seseorang yang mencoba mencari tahu dari tabel mana pemicunya.

Selanjutnya, gunakan INSERT OR UPDATE OF TIPO ON TIPO_QUARTO untuk memantau Sisipan atau memperbarui perubahan hanya di kolom TIPO dari TIPO_QUARTO tabel.

Sekarang baris ini If :new.TIPO_QUARTO = 'UTI' then , dengan asumsi pemicu ini dilampirkan ke TIPO_QUARTO tabel, tabel tersebut tidak memiliki kolom bernama TIPO_QUARTO ubah ini menjadi :new.TIPO .

Selanjutnya, PAC bertipe VARCHAR jadi tidak jelas bagi saya apa yang Anda coba lakukan di PAC := PAC - :new.TIPO; dan di PAC := PAC + :new.TIPO; kedua baris akan membuang invalid number pengecualian karena Anda tidak dapat menambah atau mengurangi string, mungkin niat Anda adalah untuk menggabungkan atau mendapatkan sub string.

Dan terakhir panggilan ke UPDATE TIPO_QUARTO SET TIPO = PAC di dalam pemicu untuk TIPO_QUARTO akan menghasilkan mutating table pengecualian, Anda tidak dapat meminta/memperbarui tabel yang ada di tengah pernyataan DML (INSERT atau UPDATE dalam kasus ini) untuk memperbaikinya, Anda cukup menetapkan :new.TIPO := PAC .

Jaga detail ini dan mungkin masalah Anda tidak akan ada lagi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memasukkan String Panjang ke Tipe Data CLOB di Oracle

  2. Folder produk Instalasi Oracle dan folder diag di tempat yang berbeda

  3. Perbedaan antara MySQL dan Oracle DB

  4. Menetapkan nilai LIMIT saat menggunakan pengumpulan massal

  5. Bagaimana saya bisa mengirim hasil kueri Oracle melalui email. Saya lebih suka melampirkan email sebagai file excel.