sql - soporta - Cómo insertar una cadena que contiene un "&"
optimizar consultas mysql explain (14)
¿Cómo puedo escribir una declaración de inserción que incluya el & carácter? Por ejemplo, si quería insertar "J & J Construction" en una columna en la base de datos.
No estoy seguro si hace una diferencia, pero estoy usando Oracle 9i.
¡Me sigo olvidando de esto y vuelvo a hacerlo de nuevo! Creo que la mejor respuesta es una combinación de las respuestas proporcionadas hasta ahora.
En primer lugar, & es el prefijo variable en sqlplus / sqldeveloper, de ahí el problema: cuando aparece, se espera que forme parte de un nombre de variable.
SET DEFINE OFF detendrá la interpretación de sqlplus y de esta manera.
Pero, ¿qué sucede si necesita usar variables sqlplus y literal y caracteres?
- Necesita SET DEFINE ON para que las variables funcionen
- Y CONFIGA ESCAPE ENCENDIDO para escapar de los usos de &.
p.ej
set define on
set escape on
define myvar=/forth
select ''back// /& &myvar'' as swing from dual;
Produce:
old 1: select ''back// /& &myvar'' from dual
new 1: select ''back/ & /forth'' from dual
SWING
--------------
back/ & /forth
Si quieres usar un personaje de escape diferente:
set define on
set escape ''#''
define myvar=/forth
select ''back/ #& &myvar'' as swing from dual;
Cuando configura un carácter de escape específico, puede ver ''SP2-0272: el carácter de escape no puede ser alfanumérico o en blanco''. Esto probablemente significa que ya tiene definido el carácter de escape, y las cosas se vuelven horriblemente autorreferenciales. La forma más limpia de evitar este problema es establecer primero el escape:
set escape off
set escape ''#''
Deje de usar SQL / Plus, recomiendo PL / SQL Developer , es mucho más que una herramienta de SQL.
ps Algunas personas prefieren TOAD .
Descubrí que usar cualquiera de las siguientes opciones funciona:
SET DEF OFF
o
SET SCAN OFF
No sé lo suficiente sobre las bases de datos para saber si una es mejor o "más correcta" que la otra. Además, si hay algo mejor que cualquiera de estos, házmelo saber.
En un programa, siempre use una consulta parametrizada. Evita los ataques de inyección SQL, así como cualquier otro carácter que sea especial para el analizador SQL.
La sintaxis correcta es
set def off;
insert into tablename values( ''J&J'');
Mira, Andrew:
"J & J Construction" :
SELECCIONE CONCAT (''J'', CONCAT (CHR (38), ''J Construction'')) FROM DUAL;
Puede insertar una cadena como ''J'' || ''&'' || ''Construcción'' . Funciona bien.
insert into table_name (col_name) values(''J''||''&''||''Construction'');
SET SCAN OFF está obsoleto http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a90842/apc.htm
Si está utilizando sql plus, entonces creo que debe emitir el comando
SET SCAN OFF
Si lo está haciendo desde SQLPLUS use
SET DEFINE OFF
para evitar que pise y como un caso especial
Siempre hay la función chr (), que convierte un código ascii en cadena.
es decir. algo como: INSERT INTO table VALUES (CONCAT (''J'', CHR (38), ''J''))
Una solución alternativa, use concatenación y la función chr:
select ''J'' || chr(38) || ''J Construction'' from dual;
INSERT INTO TEST_TABLE VALUES(''Jonhy''''s Sport &''||'' Fitness'')
Salida de esta consulta: Jonhy''s Sport & Fitness
SET ESCAPE ON;
INSERT VALUES("J/&J Construction") INTO custnames;
(No comprobado, no tengo una caja de Oracle a la mano y ha pasado un tiempo)