153 votes

PL/SQL, comment échapper à une seule citation dans une chaîne ?

Dans Oracle PL/SQL, comment échapper à une seule citation dans une chaîne ? J'ai essayé de cette façon, ça ne fonctionne 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;
/

240voto

DCookie Points 22921

Vous pouvez utiliser une citation littérale :

stmt := q'[insert into MY_TBL (Col) values('ER0002')]';

La documentation pour les littéraux peut être trouvée ici.

Vous pouvez également utiliser deux guillemets pour désigner un seul guillemet :

stmt := 'insert into MY_TBL (Col) values(''ER0002'')';

Le mécanisme de citation littérale avec la syntaxe Q est plus flexible et lisible, OMI.

2voto

nhanhoangle Points 119

Dans mon cas, j'utilise comme ceci :

stmt := q'!insert into MY_TBL (Col) values('ER0002')!';

Ajout de : q'! avant et !' après la chaîne.

Voici une autre référence : Alternative Quoting Mechanism (''Q'') for String Literals

0voto

Shravan Ramamurthy Points 1068

EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(''ER0002'')' ; a travaillé pour moi. fermer le varchar/string avec deux paires de citations simples a fait l'affaire. Une autre option pourrait être d'utiliser using keyword, EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(:text_string)' using 'ER0002' ; Rappelez-vous que using keyword ne fonctionnera pas, si vous utilisez EXECUTE IMMEDIATE pour exécuter des DDL avec des paramètres, cependant, l'utilisation de guillemets fonctionnera pour les DDL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X