¿Cómo escapo una palabra reservada en Oracle?

134

En TSQL podría usar algo como Select [table] from tablenameseleccionar una columna llamada "tabla".

¿Cómo hago esto para palabras reservadas en Oracle?

Editar: he intentado usar corchetes, comillas dobles, comillas simples y comillas inversas, no funcionan ...

Como aclaración adicional, tengo una columna que alguien mencionó comentar. Como esta es una palabra reservada, Oracle está lanzando un intento tambaleante de seleccionar con ella, falla al analizar la consulta. Intenté Seleccionar "comentario" de nombre de tabla pero no funcionó. Revisaré el caso y volveré.

Spence
fuente

Respuestas:

195

A partir de una búsqueda rápida, Oracle parece usar comillas dobles ( "p "table". Ej. ) Y aparentemente requiere el caso correcto, mientras que, para cualquier persona interesada, MySQL usa de forma predeterminada comillas invertidas (`) excepto cuando está configurado para usar comillas dobles para compatibilidad.

sin párpados
fuente
2
Lo marqué porque traté de escapar de la palabra usando comillas dobles y no funcionó.
Spence
13
De manera predeterminada, Oracle mostrará los identificadores. Entonces, si necesita caracteres en minúsculas o caracteres especiales, o si el identificador es una palabra reservada de Oracle, debe estar entre comillas dobles. Como las comillas dobles conservan mayúsculas y minúsculas, el identificador también debe ser el caso correcto.
Metro
Creé una tabla con un campo "alias" usando SQL Developer v4 golpeando una base de datos Oracle 11g Release 2 Express. Mi selección funcionó cuando escribí "ALIAS" en lugar de alias.
Broken_Window
No funciona para los desencadenantes, intente crear un desencadenante para una tabla con un nombre que viole ORA-30507 (por ejemplo, BASE DE DATOS).
Fleuv
Pruébelo en mayúsculas "TABLE".
RSHAP
34

Oracle normalmente requiere comillas dobles para delimitar el nombre de los identificadores en las declaraciones SQL, por ejemplo

SELECT "MyColumn" AS "MyColAlias"
FROM "MyTable" "Alias"
WHERE "ThisCol" = 'That Value';

Sin embargo, gentilmente permite omitir las comillas dobles, en cuyo caso convierte silenciosamente el identificador a mayúsculas:

SELECT MyColumn AS MyColAlias
FROM MyTable Alias
WHERE ThisCol = 'That Value';

se convierte internamente en algo como:

SELECT "ALIAS" . "MYCOLUMN" AS "MYCOLALIAS"
FROM "THEUSER" . "MYTABLE" "ALIAS"
WHERE "ALIAS" . "THISCOL" = 'That Value';
Jeffrey Kemp
fuente
8

las comillas dobles funcionaron en Oracle cuando tenía la palabra clave como uno de los nombres de columna.

p.ej:

select t."size" from table t 
Suresh G
fuente
3

Oracle utiliza comillas dobles, pero lo más probable es que necesite colocar el nombre del objeto en mayúsculas, por ejemplo, "TABLE". Por defecto, si crea un objeto sin comillas dobles, p. Ej.

CREATE TABLE table AS ...

Oracle crearía el objeto en mayúsculas . Sin embargo, la referencia no distingue entre mayúsculas y minúsculas a menos que utilice comillas dobles.

Andrew no es el santo
fuente
-8

debe cambiar el nombre de la columna a otro nombre porque TABLEestá reservado por Oracle.

Puede ver todas las palabras reservadas de Oracle en la vista de oráculo V$RESERVED_WORDS.

oualid
fuente
Me sale ORA-00942cuando intento unselect * from V$RESERVED_WORDS .
ceving