Paolo Pinheiro escreveu:
> 
> Estou usando o comando "execute" dentro de uma function, o mesmo faz um 
> insert em uma tabela com 3 campos. Quando o insert é em 2 campos varchar 
> not null funciona, quando é adicionado um campo numeric que pode ser 
> null não funciona mais..
> 
>     FOR todos_servicos IN
>     SELECT distinct serv_codigo, serv_descricao, serv_tempopadrao, 
> serv_precohora FROM servicos ORDER BY serv_codigo
>     LOOP
>         -- Com os campos serv_codigo e serv_descricao roda.
>         EXECUTE ' INSERT INTO temp_servicos ( serv_codigo , 
> serv_descricao ) VALUES ( '
>                          || quote_literal(todos_servicos.serv_codigo) || 
> ' , ' || quote_literal(todos_servicos.serv_descricao) ||  ' ); ';
>         -- Adicionando o campo serv_precohora não roda mais.
>         EXECUTE ' INSERT INTO temp_servicos ( serv_codigo , 
> serv_descricao , serv_precohora ) VALUES ( '
>                          || quote_literal(todos_servicos.serv_codigo) || 
> ' , ' || quote_literal(todos_servicos.serv_descricao) || ' , '       
>                        || todos_servicos.serv_precohora ||
>                         ' ); ';
> 
>     END LOOP;
> 


Se você quer dizer que quando o campo "todos_servicos.serv_precohora" é 
nulo o string resultante também é nulo então este é exatamente o 
comportamento esperado.
Em uma concatenação se qualquer dos elementos sendo concatenados for 
NULL então o resultado é NULL. (ver manual)

Tente:
...
' , ' || quote_literal(todos_servicos.serv_descricao) || ' , '
                   || coalesce(todos_servicos.serv_precohora, 'NULL') ||
                         ' ); ';

Osvaldo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a