Pregunta PL / SQL, ¿cómo escapar de comillas simples en una cadena?


En Oracle PL / SQL, ¿cómo escapar de comillas simples en una cadena? Intenté de esta manera, no funciona.

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;
/

75
2017-07-03 16:36


origen


Respuestas:


Puede usar citas literales:

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

Documentación para literales se puede encontrar aquí.

Alternativamente, puede usar dos comillas para denotar una comilla simple:

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

El mecanismo de cotización literal con la sintaxis Q es más flexible y legible, IMO.


133
2017-07-03 16:38



Aquí está una publicación de blog eso debería ayudar a escapar de las garrapatas en cuerdas.

Este es el método más simple de dicha publicación:

La forma más simple y más utilizada es usar comillas simples con dos comillas simples en ambos lados.

SELECCIONA 'test single quote' '' desde dual;

El resultado de la declaración anterior sería:

prueba una sola cita '

Simplemente indica que necesita un carácter de comilla simple adicional para imprimir un carácter de comilla simple. Es decir, si pone dos caracteres de comillas simples, Oracle imprimirá uno. El primero> uno actúa como un personaje de escape.

Esta es la forma más sencilla de imprimir comillas simples en Oracle. Pero se volverá complejo cuando tenga que imprimir un conjunto de comillas en lugar de solo una. En esta> situación, el siguiente método funciona bien. Pero requiere un poco más de trabajo de tipeo.


13
2017-07-03 18:37



Además de la respuesta de DCookie anterior, también puede usar chr (39) para una comilla simple.

Encuentro esto particularmente útil cuando tengo que crear un número de instrucciones de inserción / actualización basadas en una gran cantidad de datos existentes.

Aquí hay un ejemplo muy simple:

Select 'UPDATE Customers SET LName = ' || chr(39) || 'Doe' || chr(39) || ';' From dual;

4
2018-02-09 05:39



Simplemente ponga la siguiente declaración antes del FOR:

set escape '\';

-4
2017-11-07 19:27