Pregunta

Ok, este es el bit de un oscuro pregunta, pero espero que alguien me puede ayudar con esto.

El sistema en el que estoy trabajando construye una cadena de SQL dinámico para la ejecución de un procedimiento almacenado, y parte de esa dinámica de SQL definición de alias de columna, que en sí mismas son en realidad los valores recuperados de otra tabla de usuario de los datos generados.

Así, por ejemplo, la cadena podría ser algo así como;

SELECT table1.Col1 AS "This is an alias" FROM table1

Esto funciona bien.Sin embargo, el valor que se utiliza para el alias potencialmente puede contener un carácter de comillas dobles, que rompe el exterior de las cotizaciones.Pensé que tal vez podría escapar las comillas dobles dentro de los alias de alguna manera, pero no he tenido suerte averiguar cómo hacerlo.Barra diagonal inversa no funciona, y el uso de dos comillas dobles en una fila de resultados en este error;

SQL Error: ORA-03001: unimplemented feature
03001. 00000 -  "unimplemented feature"
*Cause:    This feature is not implemented.

Alguien ha tenido alguna experiencia con este problema antes?Saludos para cualquier visión que nadie tiene.

p.s.las comillas son necesarias alrededor de los alias ya que pueden contener espacios.

¿Fue útil?

Solución

Puede usted acaba de poner otro personaje en lugar de las comillas dobles y reemplazar con dobles comillas en el código?

Algo como esto:

SELECT table1.Col1 AS "This is |not| an alias" FROM table1

A continuación, sólo reemplazar con ".

Sé que es un hack, pero no puedo pensar en alguna solución mejor...Y lo que están haciendo no es un hack de todos modos.El "buen" camino sería seleccionar los valores y los nombres de columna por separado y asociarlos en el código.Que haría las cosas mucho más limpio.

Otros consejos

utilizar Oracle cita operador:

select q'#someone's quote#' from dual;

el '#' se puede sustituir por cualquier carácter

Cuando me encuentro con esto:

select 'test"columnname"' from dual

Oracle devuelve este (aviso Oracle generado por el nombre de la columna):

'TESTCOLUMNNAME'
--------------------------------
test"columnname

El hecho de que Oracle es el nombre de la columna no incluye mi doble cita me dice que Oracle probablemente no puede representar eso.

La mejor apuesta en lo que puedo ver es a la franja de comillas dobles a partir de los datos antes de utilizar nombres de columna.Tristemente, la que también requerirá que usted haga lo mismo cuando el filtrado seleccione las columnas, pero no veo otra manera.

posiblemente el fecundo campo de investigación sería ver en la cita método.

mi $quotedString = $dbh->quote( $cadena );

Intenta esto, dos comillas simples en realidad una doble cita en la salida:
select 1 as "University ''John Smith''" from dual;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top