Marcelo Moacir Florindo escreveu:
Senhores,

tenho esta função:

CREATE OR REPLACE FUNCTION cadastro.cidade_validar_campos()
 RETURNS "trigger" AS
$BODY$DECLARE
 resultado INT2;
BEGIN

 -- INSERT E UPDATE

IF (TG_OP='INSERT') OR (TG_OP='UPDATE') THEN

IF (CHAR_LENGTH(TRIM(NEW.nm_cidade))=0) OR (NEW.nm_cidade IS NULL) THEN
               RAISE EXCEPTION 'Nome da Cidade não poderá ser nulo.';
       END IF;

IF (CHAR_LENGTH(TRIM(NEW.cd_cidade))=0) OR (NEW.cd_cidade IS NULL) THEN
               RAISE EXCEPTION 'Código da Cidade não poderá ser nulo.';
       END IF;


END IF;

-----------------------------------------------

-- INSERT

IF (TG_OP='INSERT') THEN

       -- VALIDAR O NOME DA CIDADE
       SELECT COUNT(*) INTO resultado FROM cadastro.cidade WHERE
nm_cidade=NEW.nm_cidade;

       IF (resultado>0) THEN
               RAISE EXCEPTION 'Nome da Cidade já existe no sistema.';
       END IF;

END IF;

-----------------------------------------------

-- UPDATE

IF (TG_OP='UPDATE') THEN

       -- VALIDAR O NOME DA CIDADE
       SELECT nm_cidade FROM cadastro.cidade WHERE nm_cidade=NEW.nm_cidade
               AND cd_cidade<>NEW.cd_cidade;

       IF FOUND THEN
               RAISE EXCEPTION 'Nome da Cidade já existe no sistema';
       END IF;

END IF;

-----------------------------------------------

-- PREENCHIMENTO DOS CAMPOS

NEW.fl_status :='S';
NEW.dt_ult_atualizacao := CURRENT_TIMESTAMP;
NEW.dt_inclusao := CURRENT_TIMESTAMP;

-----------------------------------------------


RETURN NULL;
  ^^^^^^^^^^^


END;$BODY$
 LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION cadastro.cidade_validar_campos() OWNER TO sisgene;



Porém não consigo salvar os dados na tabela..
Onde poderia estar o erro??




Creio que esta função é utilizada em um trigger BEFORE, correto?
Neste caso utilize "RETURN NEW" no lugar de "RETURN NULL".
Do manual:
http://www.postgresql.org/docs/8.2/interactive/plpgsql-trigger.html
"Row-level triggers fired BEFORE may return null to signal the trigger manager to skip the rest of the operation for this row (i.e., subsequent triggers are not fired, and the INSERT/UPDATE/DELETE does not occur for this row)."

[]s
Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a