segunda-feira, 1 de outubro de 2007

Função NVL

Um dos pontos importantes para o sucesso do projeto é referente a menor quantidade de alteração do código já existente. Tentar compatibilizar as funções usadas no ORACLE, consiste em uma das tarefas de preparação do ambiente a fim de manter padrão o leque de funções já usadas. Nas próximas postagens estaremos falando destas compatibilizações, O NVL será a primeira função apresentada.

  1. NLV(P1, P2) -> Retorna o P2 caso P1 seja nulo
Como P1 pode ser de qualquer tipo , criamos para o postgres através de sobrecarga de função, várias funções NVL alterando o tipo de P1
    • NVL(Varchar, Varchar)
    • NLV(Date,Date)
    • NVL(Integer,Integer)
    • NVL(Timestamp,Timestamp)
    • NVL(Numeric,Numeric)
Internamente na função faz chamada a função COALESCE do postgres que faz o que o NVL faz no Oracle.

Código pl/pgSQL para o tipo varchar

CREATE OR REPLACE FUNCTION nvl (valor varchar, valor_padrao varchar) RETURNS varchar AS
$body$
declare retorno varchar;
begin
select into retorno coalesce(valor,valor_padrao);
return retorno;
end;
$body$
LANGUAGE 'plpgsql'

Um comentário:

Nabucodonosor Coutinho disse...

Depois disso descobrimos que algo melhor seria usar o tipo anyelement assim:

CREATE OR REPLACE FUNCTION nvl (anyelement, anyelement) RETURNS anyelement AS
$body$
select coalesce($1,$2);
$body$ language 'sql';

by TemplatesForYouTFY
SoSuechtig, Burajiru