Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

erro de gatilho inválido


Ok, vou postar isso como uma resposta porque os comentários não permitirão tanto texto.

Vendo suas mesas algumas coisas ainda não estão claras. sua função ADD_PACIENTE_QUARTO implementa um SELECT declaração que declara o predicado Where PAC = CONT mas PAC não está em PACIENTE 's, mas sim a variável local onde você armazena seu resultado e CONT é o seu parâmetro, não está claro o que você tentou lá.

Agora seu gatilho tem algumas falhas na lógica e na implementação.

Em primeiro lugar, o nome do seu gatilho é PACIENTE_TRIGGER mas a linha INSERT OR UPDATE ON TIPO_QUARTO me diz que está no TIPO_QUARTO tabela, isso não é um problema sintaticamente, mas logicamente pode ser uma dor de cabeça para alguém que está tentando descobrir a qual tabela o gatilho pertence.

Em seguida, use INSERT OR UPDATE OF TIPO ON TIPO_QUARTO para monitorar inserções ou atualizar alterações somente na coluna TIPO de TIPO_QUARTO tabela.

Agora esta linha If :new.TIPO_QUARTO = 'UTI' then , supondo que este gatilho esteja anexado a TIPO_QUARTO tabela, essa tabela não tem uma coluna chamada TIPO_QUARTO mude para :new.TIPO .

Em seguida, PAC é do tipo VARCHAR então não está claro para mim o que você está tentando fazer em PAC := PAC - :new.TIPO; e em PAC := PAC + :new.TIPO; ambas as linhas lançarão invalid number exceção, pois você não pode adicionar ou subtrair strings, talvez sua intenção fosse concatenar ou obter uma substring.

E por último a chamada para UPDATE TIPO_QUARTO SET TIPO = PAC dentro de um gatilho para TIPO_QUARTO resultará em mutating table exceção, você não pode consultar/atualizar uma tabela que está no meio de uma instrução DML (INSERT ou UPDATE neste caso) para corrigir isso, basta atribuir :new.TIPO := PAC .

Cuide desses detalhes e talvez aí seu problema não seja mais.