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.