Dans Oracle PL/SQL, comment échapper à un guillemet simple dans une chaîne? J'ai essayé de cette façon, ça ne marche pas.
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;
/
Vous pouvez utiliser des citations littérales:
stmt := q'[insert into MY_TBL (Col) values('ER0002')]';
Documentation pour les littéraux peut être trouvé ici .
Alternativement, vous pouvez utiliser deux guillemets pour désigner une seule citation:
stmt := 'insert into MY_TBL (Col) values(''ER0002'')';
Le mécanisme de citation littéral avec la syntaxe Q est plus souple et lisible, IMO.
Voici n article de blog qui devrait aider à éviter les ticks dans les chaînes.
Voici la méthode la plus simple de cet article:
La méthode la plus simple et la plus utilisée consiste à utiliser un guillemet simple avec deux guillemets simples des deux côtés.
SELECT 'test single quote' '' de dual;
La sortie de la déclaration ci-dessus serait:
test de devis unique '
Indiquez simplement que vous avez besoin d'un caractère guillemet simple supplémentaire pour imprimer un caractère> guillemet simple. Si vous mettez deux guillemets simples, Oracle en imprimera un. Le premier agit comme un personnage d'échappement.
C'est le moyen le plus simple d'imprimer des guillemets simples dans Oracle. Mais cela deviendra> complexe lorsque vous devrez imprimer un ensemble de guillemets au lieu d'un seul. Dans cette situation, la méthode suivante fonctionne bien. Mais cela nécessite un peu plus de travail de dactylographie.
En plus de la réponse de DCookie ci-dessus, vous pouvez également utiliser chr (39) pour un seul devis.
Je trouve cela particulièrement utile lorsque je dois créer un certain nombre d'instructions insert/update basées sur une grande quantité de données existantes.
Voici un exemple très simple:
Select 'UPDATE Customers SET LName = ' || chr(39) || 'Doe' || chr(39) || ';' From dual;