Insertar caracteres especiales en Oracle

Algunas veces es necesario utilizar caracteres especiales en alguna query que utilicemos en SQL*Plus.
Un problema común es el de la comillas simples ('):

SQL> INSERT INTO tmp_table (texto) VALUES ('Johnson's house');
ERROR: ORA-01756: quoted string not properly terminated

Si queremos insertar una comilla simple solo debemos ponerla doble:

SQL> INSERT INTO tmp_table (texto) VALUES ('Johnson''s house');
1 ROW created.


Por ejemplo si necesitamos insertar un "&" (ampersand) y hacemos lo siguiente:

SQL> INSERT INTO tmp_table (texto) VALUES ('El perro salio& mas luego volvio...');
Enter VALUE FOR mas: 4
old   1: INSERT INTO tmp_table (texto) VALUES ('El perro salio& mas luego volvio...')
NEW   1: INSERT INTO tmp_table (texto) VALUES ('El perro salio4 luego volvio...')

¿Que pasó? SQL*Plus interpreto el "& mas" como una variable y nos solicitó que ingresemos el valor de la misma... algo no deseable si estamos ejecutando un script.
La solución es "escapear" el caracter utilizando "":

SQL> SET escape
SQL> INSERT INTO tmp_table (texto) VALUES ('El perro salio& mas luego volvio...');
1 ROW created.

Saludos!

Esta entrada fue publicada en Oracle y etiquetada , , , . Guarda el enlace permanente.

6 respuestas a Insertar caracteres especiales en Oracle

  1. Dendral dijo:

    Fue de mucha utilidad. Es un ejemplo concreto y exactamente lo que estaba buscando. Gracias!

  2. juan david dijo:

    Me fue muy util este post.

    Muchas gracias.

  3. Carlos dijo:

    gracias por la explicacion me fue muy util

  4. Quique dijo:

    Muchas gracias por la explicación.

  5. Sebas dijo:

    Mauricio tiene razón, esa forma de concatenar nos permite por ejemplo insertar caracteres especiales como un Enter o un Tab.

    Para recordar:

    El Enter en Windows es “CHR(13) || CHR(10)”, en Unix/Linux es “CHR(10)”.
    El Tab es “CHR(7)”.

    Saludos!

  6. Mauricio dijo:

    otra forma de ingresar carateres especiales es por medio de ‘||’ y la funcion chr(numero) donde numero es el valor ASCII del caracter.

    por ejemplo si se quiere escribir

    cadena = (‘ where nombre = ‘Mauricio’) se ecribe

    cadena = ‘ where nombre = ‘||chr(39)||’Mauricio’||chr(39);

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>