una soporta segundo rapida por optimizar mas lentas lenta hacer cuello cuantas consultas consulta como botella apoc agilizar sql oracle escaping sqlplus

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'');



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)