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!
Fue de mucha utilidad. Es un ejemplo concreto y exactamente lo que estaba buscando. Gracias!
Me fue muy util este post.
Muchas gracias.
gracias por la explicacion me fue muy util
Muchas gracias por la explicación.
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!
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);