No Oracle PL / SQL, como escapar das aspas simples em uma string? Tentei assim, não deu certo.
declare
stmt varchar2(2000);
begin
for i in 1021 .. 6020
loop
stmt := 'insert into MY_TBL (Col) values(\'ER0002\')';
dbms_output.put_line(stmt);
execute immediate stmt;
commit;
end loop;
exception
when others then
rollback;
dbms_output.put_line(sqlerrm);
end;
/
Respostas:
Você pode usar citação literal:
A documentação para literais pode ser encontrada aqui .
Como alternativa, você pode usar duas aspas para denotar uma aspa simples:
O mecanismo de cotação literal com a sintaxe Q é mais flexível e legível, IMO.
fonte
Aqui está uma postagem de blog que deve ajudar a escapar de ticks em strings.
Este é o método mais simples dessa postagem:
fonte
Além da resposta do DCookie acima, você também pode usar chr (39) para uma aspa simples.
Acho isso particularmente útil quando preciso criar várias instruções de inserção / atualização com base em uma grande quantidade de dados existentes.
Aqui está um exemplo muito rápido:
Digamos que temos uma tabela muito simples, Clientes, que possui 2 colunas, Nome e Sobrenome. Precisamos mover os dados para Clientes2, então precisamos gerar um monte de instruções INSERT.
Descobri que isso é muito útil ao mover dados de um ambiente para outro ou ao reconstruir um ambiente rapidamente.
fonte
EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(''ER0002'')'
; trabalhou para mim. fechar ovarchar
/string
com dois pares de aspas simples funcionou. Outra opção pode ser usar ausing
palavra-chaveEXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(:text_string)' using 'ER0002'
; Lembre-se de que ausing
palavra-chave não funcionará, se você estiver usandoEXECUTE IMMEDIATE
para executar DDLs com parâmetros, no entanto, usar aspas funcionará para DDLs.fonte