En Oracle PL / SQL, ¿cómo escapar de las 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;
/
Respuestas:
Puede usar citas literales:
La documentación para literales se puede encontrar aquí .
Alternativamente, puede usar dos comillas para denotar una sola comilla:
El mecanismo de cotización literal con la sintaxis Q es más flexible y legible, IMO.
fuente
Aquí hay una publicación de blog que debería ayudar a escapar de las garrapatas en las cadenas.
Aquí está el método más simple de dicha publicación:
fuente
Además de la respuesta de DCookie anterior, también puede usar chr (39) para una cita simple.
Encuentro esto particularmente útil cuando tengo que crear una serie de declaraciones de inserción / actualización basadas en una gran cantidad de datos existentes.
Aquí hay un ejemplo muy rápido:
Digamos que tenemos una tabla muy simple, Clientes, que tiene 2 columnas, Nombre y Apellido. Necesitamos mover los datos a Clientes2, por lo que necesitamos generar un montón de declaraciones INSERT.
He descubierto que esto es muy útil cuando se mueven datos de un entorno a otro o cuando se reconstruye un entorno rápidamente.
fuente
EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(''ER0002'')'
; trabajó para mi. cerrar lavarchar
/string
con dos pares de comillas simples funcionó. Otra opción podría ser utilizar lausing
palabra claveEXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(:text_string)' using 'ER0002'
; Recuerde que lausing
palabra clave no funcionará, si está utilizandoEXECUTE IMMEDIATE
para ejecutar DDL con parámetros, sin embargo, usar comillas funcionará para DDL.fuente