Incompatibilidades

<< Click to Display Table of Contents >>

Navigation:  PostgreSQL > Postgre 9.0 >

Incompatibilidades

Previous pageReturn to chapter overviewNext page

Caracter de escape

Comentários

Parâmetros de funções


Caracter de escape.

Caracter de escape é um termo usado em computação para identificar um único caracter numa cadeia de caracteres que altera o significado de seu sucessor. Uma sequência de escape é o subconjunto de caracteres da cadeia de caracteres formado pelo caracter de escape e o caracter com o significado alterado. Em geral, este caractere é a barra contrária (\).

 

Na versão 8.3 o seguinte comando é executado e a sequência "\n" é alterada por uma quebra de linha (Enter).

select 'Linha 1\nLinha 2'

 

Porém já dava o HINT e WARNING informando que isto poderia dar problema.

AVISO:  uso de escape fora do padrão em cadeia de caracteres at character 8

HINT:  Utilize a sintaxe de escape de cadeia de caracteres para escapes, i.e., E'\r\n'.

 

Para o caracter de escape ser identificado na cadeia de caracters no Postgres 9.0 é necessário informacar o caracter "E" antes da string.

select E'Linha 1\nLinha 2'

 

Obs.: Isto tambem resolve o problema de HINT e WARNING no postgres 8.3.

 

Caracter de escape uteis:

\' = Retorna a aspa simples. O resultado dos dois comandos são o mesmo: select E'aaa\'bbb\'ccc' e select E'aaa''bbb''ccc'

\xNº: Trocar o Nº pelo código ASCII referente ao caracter desejado. Ex.: select E'aaa\x22bbb\x22ccc'. O resultado será  texto: aaa"bbb"ccc

\n: Quebra de linha (Enter)


Comentários

Agora existe uma validação nos comentários de triggers/funções. Ao iniciar o bloco de comentários não é possivel recomeçar outro bloco sem terminar o problema (Isto seria algo totalmente desnecessário mas o Josuéééééé está enter nós).

 

Se o seguinte trecho estive dentro de uma função, será exibido o seguinte erro ao tentar compilar:

ERRO: comentário /* não foi terminado em ou próximo a "/*

 

/*                        

------------------------------------------------------------------------------

--Caso for uma  C A R C A Ç A   seta o custo entre os rendimentos            

/*   <= Por causa deste inicio de comentário (Adivinha de quem era esse script?)

 if saldo.fn_get_is_produto_carcaca(l_nr_produto)='S' then

 select movimento.fn_set_custo_rendimento_carcaca(new.cd_loja, new.cd_produto , new.qt_unitario, l_vl_custo, l_is_grava_lojas , coalesce(new.cd_usuario_alteracao, new.cd_usuario_gravacao) , l_is_grava_custo_sem_perda) into l_result;

           end if;

*/


Parâmetros de funções

No Postgre 9.0 é possível alterar o valor de um parâmetro de entrada na função, o código abaixo funciona no 9.0 e deve-se tomar cuidado pra não utilizar esta sintax.

 

CREATE OR REPLACE FUNCTION "public"."fn_teste" (

  "i_valor" integer

)

RETURNS integer AS

$body$

begin

  i_valor = 10;       <= Esta atribuição resulta em erro na versão 8.3, 

                    por estar tentando modificar um valor de parâmetro de entrada.

 

  return i_valor;

end

$body$

LANGUAGE 'plpgsql'

VOLATILE

CALLED ON NULL INPUT

SECURITY INVOKER

COST 100;

 

 

 

Este comando resulta no seguinte erro na versão 8.3 do Postgre.

ERROR:  "$1" is declared CONSTANT

CONTEXT:  compile of PL/pgSQL function "fn_teste" near line 2