2011-08-18 764 views
17

Estoy intentando una instrucción INSERT simple contra una base de datos Oracle. Uno de los valores es un campo VARCHAR2 y la instrucción insertar contiene un signo comercial. ¿Cómo hago esto? He intentado los métodos siguientes:Escape ampersand en PL/SQL Developer

  1. escapar de la & como \ & con juego de escape en
  2. conjunto escanear fuera (esto provoca un ORA-00922 que falta o error de opción inválida)
  3. conjunto definen apagado (esto causa un OAR-00922 error de opción faltante o no válida)

¿Alguna otra idea?

+3

Lo he "resuelto" usando la solución chr (38) en esta pregunta: http://stackoverflow.com/questions/1137354/oracle-pl-sql-escape-character-for-a pero me gustaría algo más elegante –

+0

¿Está tratando de ejecutar la inserción a través de una ventana SQL o una ventana de comando? –

+0

Ray, ¿ha intentado establecer la definición en otro personaje en lugar de simplemente configurarlo por completo? No estoy seguro de si sería útil ya que no uso PLSQL Developer, pero podría ... – Ollie

Respuesta

21

Cómo lo solucioné escapando del & con otro &.

Por ejemplo:

INSERT INTO Foo (Bar) VALUES ('Up && Away'); 

funciona muy bien. Gracias por toda la ayuda

+0

de hecho, pero tenga cuidado de no reemplazar "&" por "&&" con la herramienta nativa de búsqueda y reemplazo plsqld, ya que podría entrar en un bucle infinito. – roselan

+1

No es para mí ... mi solución fue la respuesta "... INSERT INTO tablex VALUES ('Sid' || '&' || 'Nancy'); ..." –

+0

no funcionó para mí también. – th1rdey3

8

¿Has probado algo como esto?

INSERT INTO tablex VALUES ('Sid ' || '&' || ' Nancy'); 

Mejorando mi primera respuesta, su problema está relacionado con PL/SQL Developer. Si ejecuta su bloque en una ventana de comando de desarrollador PL/SQL, también puede usar el estándar SET DEFINE OFF, que funciona igual que en SQL * Plus.

+0

No creo que sea más elegante que la solución 'chr (38)' que menciona Ray. – APC

+0

probablemente, pero es el que usé cuando me enfrenté a un problema similar hace un año. En http://www.orafaq.com/wiki/SQL_FAQ también hay algunas buenas soluciones en SQL * Plus, como SET ESCAPE '\', SET DEFINE ~ o SET SCAN OFF – Aitor

+1

Una solución agradable y más agradable que jugar con la configuración global . Un poco más corto: 'Sid &' || 'Nancy'. –

12

Una de las características de PL/SQL Developer con la que se necesita familiarizarse es la gran cantidad de tipos de ventanas diferentes.

Una de ellas es la ventana COMMAND, que básicamente es un emulador SQL * Plus. Podemos ejecutar comandos SQL * Plus así como SQL, así que SET ESCAPE, SET DEFINE y de hecho SET SCAN OFF funcionan en esa ventana.

4

la concat funcionó perfectamente bien para mí a continuación es lo que hice en mi instrucción de selección:

select FUND_NM 
FROM PERFORMANCE 
WHERE upper(FUND_DESC) in ('My L&' ||'L FUNDS') 
2

utilizo chr(38) donde necesito un símbolo de unión en PL/SQL.

addr:= 'mysite.com/order.aspx?no=5678' || CHR(38) || 'id=947'; 
--above line gives you 'mysite.com/order.aspx?no=5678&id=947'; 
12

La versión actual de PL/SQL Developer (11.0.x) tiene un botón para desactivar/habilitar las variables de sustitución.

enter image description here

+0

Eso fue difícil de encontrar. Pasé 10 minutos navegando por todas las opciones en la configuración y solo luego encontré esto en línea. –

0

Esto es sólo un problema de SQL Editor. Para resolver esto, simplemente compile el procedimiento con SET DEFINE OFF; . La ejecución que es PL (ejecutándose en el servidor) no enfrentará este problema.