2012-07-03 105 views
64

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

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

posible duplicado de [Escapar comilla simple en PLSQL] (http://stackoverflow.com/questions/6678478/escaping-single-quote-in-plsql) –

Respuesta

121

Usted puede utilizar literal citar:

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

Documentación para los literales can be found here.

Como alternativa, puede utilizar dos comillas para denotar una comilla simple:

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

El mecanismo citando literal con la sintaxis de Q es más flexible y fácil de leer, la OMI.

11

Aquí está el a blog post que debería ayudar a evitar los tics en las cadenas.

Aquí es el método más simple de dicho mensaje:

La manera más simple y más utilizado es utilizar una comilla simple con dos individuales> comillas en ambos lados.

SELECCIONE 'test single quote' '' desde dual;

La salida de la declaración anterior sería:

prueba comilla simple'

Simplemente indicando que necesite un carácter adicional comilla simple para imprimir una comilla simple> carácter. 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.

-3

sólo hay que poner la siguiente declaración antes de la PARA:

set escape '\'; 
+1

No lo hice -1, pero no pude hacer que esto funcione. – rjdkolb

2

Además de la respuesta de DCookie anteriormente, también se puede utilizar CHR (39) para una comilla simple.

Me resulta especialmente útil cuando tengo que crear una serie de instrucciones de inserción/actualización basadas en una gran cantidad de datos existentes.

Aquí hay un ejemplo muy sencillo:

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