Oracle
 sql >> Baza danych >  >> RDS >> Oracle

błąd nieprawidłowego wyzwalacza

Ok, opublikuję to jako odpowiedź, ponieważ komentarze nie pozwolą na tak dużo tekstu.

Widząc twoje stoły, niektóre rzeczy wciąż nie są jasne. twoja funkcja ADD_PACIENTE_QUARTO implementuje SELECT instrukcja, która określa predykat Where PAC = CONT ale PAC nie znajduje się w PACIENTE , ale raczej jest to zmienna lokalna, w której przechowujesz wynik i CONT jest twoim parametrem, nie jest jasne, czego tam próbowałeś.

Teraz Twój wyzwalacz ma pewne wady w logice i implementacji.

Po pierwsze, nazwa Twojego wyzwalacza to PACIENTE_TRIGGER ale wiersz INSERT OR UPDATE ON TIPO_QUARTO mówi mi, że jest na TIPO_QUARTO tabeli, nie jest to problem składniowy, ale logicznie może być uciążliwy dla kogoś, kto próbuje dowiedzieć się, do której tabeli należy wyzwalacz.

Następnie użyj INSERT OR UPDATE OF TIPO ON TIPO_QUARTO do monitorowania wstawek lub aktualizowania zmian tylko w kolumnie TIPO z TIPO_QUARTO tabeli.

Teraz ta linia If :new.TIPO_QUARTO = 'UTI' then , zakładając, że ten wyzwalacz jest dołączony do TIPO_QUARTO tabela, ta tabela nie ma kolumny o nazwie TIPO_QUARTO zmień to na :new.TIPO .

Następnie PAC jest typu VARCHAR więc nie jest dla mnie jasne, co próbujesz zrobić w PAC := PAC - :new.TIPO; oraz w PAC := PAC + :new.TIPO; obie linie zwrócą invalid number wyjątek, ponieważ nie możesz dodawać ani odejmować ciągów, być może Twoim zamiarem było połączenie lub uzyskanie podciągu.

I na koniec wywołanie UPDATE TIPO_QUARTO SET TIPO = PAC wewnątrz wyzwalacza dla TIPO_QUARTO spowoduje mutating table wyjątek, nie możesz zapytać/zaktualizować tabeli, która jest w środku instrukcji DML (w tym przypadku INSERT lub UPDATE), aby to naprawić, możesz po prostu przypisać :new.TIPO := PAC .

Zadbaj o te szczegóły, a może wtedy Twój problem przestanie istnieć.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wywołać funkcję skrótu Oracle MD5?

  2. „ORA-00942:tabela lub widok nie istnieje” tylko podczas uruchamiania w ramach procedury składowanej

  3. Zagadnienia dotyczące wydajności danych tymczasowych w Oracle

  4. Czy możemy redystrybuować plik tools.jar Oracle?

  5. Procedura składowana Oracle:zwróć zarówno zestaw wyników, jak i parametry wyjściowe