Come posso evitare una parola riservata in Oracle?


134

In TSQL ho potuto usare qualcosa di simile Select [table] from tablenameper selezionare una colonna denominata "tabella".

Come posso farlo per le parole riservate in Oracle?

Modifica: ho provato parentesi quadre, virgolette doppie, virgolette singole e backquotes, non funzionano ...

Come ulteriore chiarimento, ho una colonna che qualcuno ha chiamato commento. Poiché questa è una parola riservata oracolo sta ridacchiando un traballante che prova a selezionarlo, fallendo quando analizza la query. Ho provato Seleziona "comment" da tablename ma non ha funzionato. Controllerò il caso e tornerò.


Risposte:


195

Da una rapida ricerca, Oracle sembra usare le virgolette doppie ( ", ad es. "table") E apparentemente richiede il caso corretto - tuttavia, per chiunque sia interessato, MySQL utilizza per impostazione predefinita backtick (`) tranne quando è impostato per utilizzare le virgolette doppie per la compatibilità.


2
Ti ho segnato perché ho cercato di sfuggire alla parola usando le doppie virgolette e non ha funzionato.
Spence,

13
Per impostazione predefinita, Oracle sostituirà tutti gli identificatori. Pertanto, se hai bisogno di caratteri minuscoli o caratteri speciali o se l'identificatore è una parola riservata Oracle, deve essere racchiuso tra virgolette doppie. Poiché le virgolette doppie conservano il caso, anche l'identificatore deve essere il caso corretto.
Metro

Ho creato una tabella con un campo "alias" usando SQL Developer v4 colpendo un database Oracle 11g Release 2 Express. La mia selezione ha funzionato quando ho scritto "ALIAS" anziché alias.
Broken_Window,

Non funziona per i trigger, prova a creare un trigger per una tabella con un nome che viola ORA-30507 (ad es. DATABASE).
Fleuv,

Provalo in "TABELLA" maiuscola.
RSHAP,

34

Oracle richiede normalmente virgolette per delimitare il nome degli identificatori nelle istruzioni SQL, ad es

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

Tuttavia, consente gentilmente di omettere le doppie virgolette, nel qual caso converte silenziosamente l'identificatore in maiuscolo:

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

viene convertito internamente in qualcosa del tipo:

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

8

le virgolette doppie funzionavano in Oracle quando avevo la parola chiave come uno dei nomi della colonna.

per esempio:

select t."size" from table t 

3

Oracle utilizza le virgolette doppie, ma molto probabilmente è necessario inserire il nome dell'oggetto in maiuscolo, ad esempio "TABELLA". Per impostazione predefinita, se si crea un oggetto senza virgolette doppie, ad es

CREATE TABLE table AS ...

Oracle avrebbe creato l'oggetto come maiuscolo . Tuttavia, il riferimento non fa distinzione tra maiuscole e minuscole a meno che non si utilizzino le virgolette doppie!


-8

devi rinominare la colonna con un altro nome perché TABLEè riservato da Oracle.

Puoi vedere tutte le parole riservate di Oracle nella vista dell'oracolo V$RESERVED_WORDS.


Ottengo ORA-00942quando provo a select * from V$RESERVED_WORDS.
ceving
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.