2008-09-11 14 views
5

Ok, esta es una pregunta poco clara, pero espero que alguien pueda ayudarme con ella.Cotizaciones dobles en Oracle Column Aliases

El sistema en el que estoy trabajando crea una cadena SQL dinámica para su ejecución dentro de un procedimiento almacenado, y parte de ese alias SQL dinámicos que definen columnas, que en realidad son valores recuperados de otra tabla de datos generados por el usuario.

Así que, 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 usa para el alias puede contener un carácter de comillas dobles, que rompe las comillas externas. Pensé que tal vez podría escapar a las comillas dobles dentro del alias de alguna manera, pero no he tenido suerte en descubrir cómo hacerlo. La barra invertida no funciona, y el uso de dos comillas dobles en una fila da como resultado 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 anteriormente? Saludos por cualquier idea que alguien tenga.

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

Respuesta

4

¿Puedes poner otro carácter en lugar de comillas dobles y reemplazarlo con comillas dobles en el código?

Algo como esto:

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

A continuación, basta con sustituir | con ".

Sé que es un truco, pero no puedo pensar en ninguna solución mejor ... Y lo que está haciendo allí es un truco de todos modos. La" buena "manera sería seleccionar los valores y el nombre de columna por separado y asócielos en su código. Eso haría las cosas mucho más limpias.

1

Cuando ejecuto esto:

select 'test"columnname"' from dual 

Oracle devuelve este (nótese el nombre de columna generados por Oracle):

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

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

La mejor apuesta que puedo ver es quitar comillas dobles de sus datos antes de usar los nombres de las columnas. Lamentablemente, eso también requerirá que haga el mismo filtrado cuando seleccione esas columnas, pero no veo otra manera.

0

un área de investigación posiblemente fructífera sería estudiar el método de cotización.

my $ quotedString = $ dbh-> quote ($ string);

2

uso del operador comilla Oracle:

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

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

0

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