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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral