¿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é.


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.


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';

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 

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.


-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.


Me sale ORA-00942cuando intento unselect * from V$RESERVED_WORDS .
ceving
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.