Colega, gostei da idéia.
Então começo com duas sugestões e também com um questionamento.

Sugestaão 1:

Como antes de vir para o PostgreSQL trabalhava muito com ORACLE, me 
deparei com a terrível falta do comando NVL, que em caso do campo ser 
null numa querie, retornava um valor default como segue:
    select nvl(campo, 0) as novonome, ....
    from tabela.
onde o primeiro argumento é o nome do campo e o segundo o valor dafault.
Então desenvolvi a função nvl no pg/plsql da seguinte forma:
    CREATE OR REPLACE FUNCTION nvl(int4, int4)
    RETURNS int4 AS
   $BODY$
    DECLARE
         pCAMPO ALIAS FOR $1;
         pSUBST ALIAS FOR $2;
         BEGIN
          if (pCAMPO isnull) then
            return pSUBST;
          else
            return pCAMPO;
          end if;
         end
         $BODY$
           LANGUAGE 'plpgsql' VOLATILE;
O problema que me deparei é que precisei criar uma função nvl para cada 
tipo de dado tratado, não chega a ser um problema, mas é chato...
      - CREATE OR REPLACE FUNCTION nvl("numeric", int4)   RETURNS int4 AS
      - CREATE OR REPLACE FUNCTION nvl(bpchar, bpchar)  RETURNS bpchar AS
      - CREATE OR REPLACE FUNCTION nvl(date, date)  RETURNS date AS
Estas funções "quebraram meu galho", funcionando bem e rápido, 
principalmente nos casos de portabilidade de aplicações entre bancos 
distintos.
Poderiam ser melhores, nesse sentido peço a colaboração de vocês. Tem 
como definir tipo de dado genérico no postgres, sem a necessidade de 
fazer CAST?

Sugestão 2:

Também senti falta de uma função de conversão to_number (oracle), que 
faz a conversão pbchar para numero. Como precisei, novamente por 
questões de portabilidade de aplicações, a criei:
CREATE OR REPLACE FUNCTION to_number(bpchar)
  RETURNS int8 AS
$BODY$
 DECLARE
 pCAMPO ALIAS FOR $1;
 cCAMPO bpchar;
 vCAMPO int8;
BEGIN
 cCAMPO := trim(translate(upper(pCAMPO),'ÚÁÉÍÓÔÛÎÂÊÃÕÜÙÀÈÌÒ 
QWERTYUIOP[]ASDFGHJKL;ZXCVBNM,./<>?|{}:"-_=+)(*&[EMAIL PROTECTED]',''));
 if (cCAMPO='') then
   cCAMPO='0';
 end if;
 vCAMPO := CAST (cCAMPO as int8);
 --vCAMPO := cCAMPO;
 return vCAMPO;
end
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;


Estas funções podem não ser o "Estado da Arte", mas resolveram meus 
problemas naquele determinado momento e situação.

Por favor, teçam comentários.

Rudinei Dias






Iannsp wrote:
> [EMAIL PROTECTED] escreveu:
>   
>> Pessoal,
>>
>> Se me permitem uma colaboração:
>>
>> <plpgsql>
>>
>> drop function dias_nummes(integer, integer);
>> create or replace function dias_nummes(integer, integer) returns
>> integer as
>> $$
>> select
>>   extract(day from (date (trim(to_char($2, '0000'))||'-'||trim(to_char($1, 
>> '00'))||'-01') + interval '1 month') - interval '1 day')::integer;
>> $$  language 'sql';
>>
>> select dias_nummes(1, 2006), dias_nummes(2, 2006), dias_nummes(12, 2006), 
>> dias_nummes(2, 2004);
>>
>> </plpgsql>
>>
>> Só com SQL resolve-se o problema, inclusive do ultimo dia de Dezembro.
>>
>> Cordialmente,
>>
>>
>> --
>> Fabrízio de Royes Mello
>> [EMAIL PROTECTED]
>> _______________________________________________
>> Grupo de Usuários do PostgreSQL no Brasil
>> Antes de perguntar consulte o manual
>> http://pgdocptbr.sourceforge.net/
>>
>> Para editar suas opções ou sair da lista acesse a página da lista em:
>> http://pgfoundry.org/mailman/listinfo/brasil-usuarios
>>
>>   
>>     
> Gostei da resposta, pensei en usar o interval mas não quiz o overhead de 
> buscar mais uma funcao se com aritimética simples resolvia, mas ficou a 
> mais simples mesmo, creio eu.
>
> Pessoal, pensei em propor o seguinte a todos: Que tal começarmos a 
> enviar propostas para esta lista de soluções para problemas do dia a dia?
>
> Nós vamos enviando sugestoes de problemas e os integrantes que tiverem 
> afim vão respondendo com sugestoes de codigo para que cheguemos no final 
> à uma "biblioteca "de funcoes que podem ajudar a todos.
> Bem, se me permitem sugiro os problemas abaixo, que se encaixam em 
> problemas do tipo simples.
> A intenção é criar funcoes que possam ser usadas em qualquer situação, 
> portanto, genéricas.
>
> -Pesquisar palavras sem acentos.
> -Limpar valores de espaços duplos e espaços no inicio e fim.
> -limpar valores de substrings quaisquer.
> -verificar dia da semana com resposta em numero e em texto em portugues.
> -retornar mes em portugues.
> -calcular diferenca de dias entre datas.
> -exemplo de funcoes cujo parametro de entrada seja array para que mais 
> pessoas conheçam esse tipo de implementação.
> -modelos de ACL.
> -exemplos de funções recursiva
>
> Bem, estes itens seriam iniciais e quem desejar poderia adicionar mais 
> itens.
> Creio que isso vai facilitar em muito o trabalho de iniciantes e talvez 
> mostre a muito usuários atuais maneiras diferentes de se resolver os 
> mesmos "problemas".
>
> Obrigado.
> Grande Abraço.
>
>
>   

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a