transponer - Cotizaciones dobles en alias de columnas de Oracle
pivot oracle columns to rows (5)
¿Puedes poner otro personaje 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
Entonces solo reemplaza | con ".
Sé que es un truco, pero no puedo pensar en una solución mejor ... Y lo que estás haciendo allí es un hack de todos modos. La forma "agradable" sería seleccionar los valores y los nombres de columna por separado y asociarlos en su código. Eso haría las cosas mucho más limpias.
Ok, esta es una pregunta poco clara, pero espero que alguien pueda ayudarme con eso.
El sistema en el que estoy trabajando crea una cadena de SQL dinámica para la ejecución dentro de un procedimiento almacenado, y parte de ese alias de columna de definición de SQL dinámico, que en realidad son valores recuperados de otra tabla de datos generados por el usuario.
Entonces, 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 antes? Saludos por cualquier idea que alguien tenga.
ps las comillas son necesarias alrededor de los alias porque pueden contener espacios.
Cuando ejecuto esto:
select ''test"columnname"'' from dual
Oracle devuelve esto (observe el nombre de columna generado por Oracle):
''TESTCOLUMNNAME''
--------------------------------
test"columnname
El hecho de que el nombre de la columna de Oracle no incluya mi cita doble me dice que Oracle probablemente no puede representar eso.
La mejor apuesta, por lo que puedo ver, es eliminar las comillas dobles de sus datos antes de usar los nombres de las columnas. Tristemente, eso también requerirá que hagas el mismo filtrado cuando seleccionas esas columnas, pero no veo otra manera.
un área de investigación posiblemente fructífera sería estudiar el método de cotización.
my $ quotedString = $ dbh-> quote ($ string);
utilice el operador de cotizaciones Oracle:
select q''#someone''s quote#'' from dual;
el ''#'' puede ser reemplazado por cualquier caracter
Pruebe esto, dos comillas simples parecen una comilla doble en el resultado:
select 1 as "University ''''John Smith''''" from dual;