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.