Stack Overflow em Português Asked on September 27, 2021
Boa tarde, galera. tudo bem com vocês?
Estou tentando criar uma trigger que ao realizar um cadastro de parceiro ele marque automaticamente que o parceiro é cliente. No banco, esse campo é chamado de CLIENTE e recebe o valor ‘S’, porém, estou me deparando com o seguinte erro ao tentar cadastrar um parceiro :ORA-04098: gatilho ‘TESTE.AD_TRG_INC_UPD_TGFPAR’ é inválido e a revalidação falhou. Poderiam me ajudar?
CREATE OR REPLACE TRIGGER AD_TRG_INC_UPD_TGFPAR
BEFORE INSERT OR UPDATE OF CLIENTE ON TGFPAR
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF :NEW.CLIENTE ='N' OR :NEW.CLIENTE IS NULL THEN
:NEW.CLIENTE := 'S';
END´´´
Boa tarde, Agradeço a ajuda. Consegui resolver graças aos conselhos de vocês. A query ficou assim.
BEFORE INSERT OR UPDATE ON TGFPAR
--REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION; -- corrige mutante trigger
V_CLIENTE VARCHAR2(10);
BEGIN
SELECT user INTO V_CLIENTE
FROM DUAL;
:new.cliente:= 'S';
END;´´´
Answered by Pablo Dos Santos Neves on September 27, 2021
CREATE OR REPLACE TRIGGER AD_TRG_INC_UPD_TGFPAR
BEFORE INSERT OR UPDATE OF CLIENTE ON TGFPAR
FOR EACH ROW
BEGIN
IF TRIM(:NEW.CLIENTE) IS NULL THEN
:NEW.CLIENTE := 'S';
END IF;
END;
Poderia também criar um DEFAULT na coluna
ALTER TABLE TGFPAR
MODIFY CLIENTE NOT NULL DEFAULT 'S';
Aplicando isto garantir não existir valores null
UPDATE TGFPAR SET CLIENTE NOT NULL DEFAULT 'S'
WHERE TRIM(CLIENTE) IS NULL;
Answered by Motta on September 27, 2021
Acredito que você esteja fazendo confusão entre UPDATE e INSERT, no caso o campo já existe você quer altera-lo para 'S', no caso você tem que utilizar o UPDATE:
CREATE OR REPLACE TRIGGER AD_TRG_INC_UPD_TGFPAR
AFTER INSERT OR UPDATE OF CLIENTE ON TGFPAR
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF :NEW.CLIENTE IS NULL THEN
:NEW.CLIENTE := 'S';
END
Outro erro que pode está dando é que sempre que você utilizar o :NEW ou :OLD o próximo valor depois do . (ponto) é o nome da coluna, verifique se realmente é o nome da coluna do valor que você deseja alterar.
Answered by Heitor Scalabrini on September 27, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP