Logo

Firebird: Linguagem PSQL

Otimização e centralização de regras de negócio com Procedural SQL.

Colocando aspas simples numa string que talvez já tenha aspas também

A linguagem Pascal tem uma função muito útil para construção de queries chamada QuotedStr. Esta função coloca uma string entre aspas. Por exemplo, digamos que uma variável onde nome=Sant'Ana, e agora você precisa usá-la dentro de uma query:

SQL.Text:='SELECT * FROM CLIENTES WHERE NOME='+QuotedStr(nome);

O QuotedStr notará as aspas simples em 'nome' e a duplicará para que o código SQL funcione, ficando assim Sant''Ana. Dentro da linguagem procedural (PSQL daqui em diante) também precisamos disso em situações variadas, por exemplo, quando precisamos usar EXECUTE STATEMENT com comandos SQL puros e você não sabe se alguns deles terão aspas simples em seu interior. Por essa razão criei a função STR_QUOTED:

CREATE OR ALTER FUNCTION STR_QUOTED (
    AVALUE VARCHAR(4096),
    AUSE_IN_SQL BOOLEAN = FALSE)
RETURNS VARCHAR(4096)
AS
DECLARE VARIABLE Q VARCHAR(1);
BEGIN
  /* Essa procedure retorna um texto (4096 bytes) entre aspas simplesmente e opcionalmente
     com aspas simples dentro do texto transformando-se em aspas simples duplas.
     p='ola mundo'
     ret=STR_QUOTED(:p, FALSE);   // resultado: 'ola mundo' com aspas simples abrindo e fechando o texto
     Se o segundo parâmetro for 'TRUE' ele também trocará aspas simples que houverem dentro
     do texto para aspas simples duplas.
     Útil para uso com banco de dados e instruções EXECUTE STATEMENT
     by gladiston.santana[em]gmail.com
  */
  Q='''';
  IF (:AUSE_IN_SQL) THEN
  BEGIN
    IF (POSITION (:Q IN :AVALUE)>0) THEN
    BEGIN
      -- Troca aspas simples por duplas
      AVALUE = REPLACE (:AVALUE, :Q, :Q||:Q);
    END
  END
  -- Retorna uma string entre aspas
  RETURN :Q||:AVALUE||:Q;
END

Como usar

SQL='UPDATE CLIENTES SET STATUS='||
  STR_QUOTED('A')||
  ' WHERE UF='||STR_QUOTED('SP');
EXECUTE STATEMENT :SQL;

Conclusão

Agora você tem um QuotedStr em PSQL.

← Voltar para PSQL