Neste post vamos apresentar alguns recursos simples que podem ser utilizados para tratar parâmetros em funções no Postgresql.
* Raise Notice
Utilize Raise Notice para disparar avisos ao usuário da função. Estes avisos podem funcionar como advertências, apresentar informações relevantes sobre os parâmetros fornecidos e sobre a execução da função em si.
Estes avisos não interrompem a execução da função nem são considerados erros pelos aplicativos.
Exemplo 1:
CREATE OR REPLACE FUNCTION teste_par_1(par_1 varchar(10)) RETURNS varchar(10) AS
$$
BEGIN
IF char_length(par_1) < 2 THEN
RAISE NOTICE 'Valor não fornecido ou muito pequeno: %',$1;
RETURN 'AVISO';
END IF;
RETURN 'OK';
END;
$$ LANGUAGE PLPGSQL;
banco=# Select teste_par_1 ('T');
NOTA: Valor não fornecido ou muito pequeno: T
teste_par_1
-------------
AVISO
(1 registro)
* Raise Exception
Utilize Raise Exception para disparar um erro ao usuário da função acompanhado de uma mensagem explicativa. A emissão de erro interrompe a execução da função.
Exemplo 2:
CREATE OR REPLACE FUNCTION teste_par_2(par_2 varchar(10)) RETURNS varchar(10) AS
$$
BEGIN
IF char_length(par_2) < 2 THEN
RAISE EXCEPTION 'Formato inválido: %',$1;
RETURN 'ERRO';
END IF;
RETURN 'OK';
END;
$$ LANGUAGE PLPGSQL;
banco=# Select teste_par_2 ('T');
ERRO: Formato inválido: T* RETURNS NULL ON NULL INPUT ou STRICT
O uso da cláusula STRICT ou "RETURNS NULL ON NULL INPUT" faz com que seja retornado valor nulo caso um dos parâmetros fornecidos seja nulo. É um recurso interessante e que pode poupar tempo de processamento em funções mais elaboradas. Para que a função aceite valores nulos, existe a cláusula "CALLED ON NULL INPUT", mas a mesma é pouco utilizada por ser o comportamento default para as funções no Postgresql.
Observe no exemplo abaixo que o valor nulo (null) é diferente da string sem elementos.
Exemplo 3:
CREATE OR REPLACE FUNCTION teste_par_3(par_3 varchar(10)) RETURNS varchar(10) AS
$$
BEGIN
RETURN 'OK';
END;
$$ LANGUAGE PLPGSQL RETURNS NULL ON NULL INPUT;
banco=# Select teste_par_3 (null);
teste_par_3
-------------
(1 registro)
banco=# Select teste_par_3 ('');
teste_par_3
-------------
OK
(1 registro)
banco=# Select teste_par_3 ('T');
teste_par_3
-------------
OK
(1 registro)
A utilização de várias validações conjuntamente é a melhor forma de assegurar que a função receba valores processáveis. O exemplo abaixo é uma ilustração desta necessidade.
Exemplo 4:
CREATE OR REPLACE FUNCTION teste_par (par_todos varchar(10)) RETURNS varchar(10) AS
$$
BEGIN
IF char_length(par_todos) <=3 THEN
RAISE EXCEPTION 'Valor muito pequeno não nulo: %',$1;
RETURN 'ERRO';
ELSE
IF char_length(par_todos) <=5 THEN
RAISE NOTICE 'Valor muito pequeno: %',$1;
RETURN 'AVISO';
END IF;
END IF;
RETURN 'OK';
END;
$$ LANGUAGE PLPGSQL RETURNS NULL ON NULL INPUT;
pf=# Select teste_par (null);
teste_par
-----------
(1 registro)
pf=# Select teste_par ('T');
ERRO: Valor muito pequeno não nulo: T
pf=# Select teste_par ('Test');
NOTA: Valor muito pequeno: Test
teste_par
-----------
AVISO
(1 registro)
Atualmente existem além de NOTICE e EXCEPTION vários outros qualificadores das mensagens: DEBUG, LOG, INFO, NOTICE, WARNING, e EXCEPTION, sendo que este último é o valor padrão.
Utilize-os nas suas validações, tentando sempre manter o código o mais simples possível!
Nenhum comentário:
Postar um comentário