Wie entkomme ich einem reservierten Wort in Oracle?

134

In TSQL könnte ich so etwas wie Select [table] from tablenameeine Spalte mit dem Namen "Tabelle" auswählen.

Wie mache ich das für reservierte Wörter in Orakel?

Bearbeiten: Ich habe versucht, eckige Klammern, doppelte Anführungszeichen, einfache Anführungszeichen und Rückzitate, sie funktionieren nicht ...

Zur weiteren Verdeutlichung habe ich eine Spalte, die jemand Kommentar genannt hat. Da dies ein reserviertes Wort ist, versucht Orakel einen wackeligen Versuch, damit auszuwählen, was beim Parsen der Abfrage fehlschlägt. Ich habe versucht, "Kommentar" aus dem Tabellennamen auszuwählen, aber es hat nicht funktioniert. Ich werde den Fall prüfen und zurückkommen.

Spence
quelle

Antworten:

195

Bei einer schnellen Suche scheint Oracle doppelte Anführungszeichen zu verwenden ( "z. B. "table") und erfordert anscheinend den richtigen Fall . Für alle Interessierten verwendet MySQL standardmäßig Backticks (`), es sei denn, aus Kompatibilitätsgründen werden doppelte Anführungszeichen verwendet.

Augenlidlosigkeit
quelle
2
Ich habe dich markiert, weil ich versucht habe, dem Wort mit doppelten Anführungszeichen zu entkommen, und es hat nicht funktioniert.
Spence
13
Standardmäßig stellt Oracle alle Bezeichner in Großbuchstaben. Wenn Sie also entweder Kleinbuchstaben oder Sonderzeichen benötigen oder der Bezeichner ein von Oracle reserviertes Wort ist, muss er in doppelte Anführungszeichen gesetzt werden. Da doppelte Anführungszeichen die Groß- und Kleinschreibung beibehalten, muss der Bezeichner auch die richtige Groß- und Kleinschreibung sein.
Metro
Ich habe mit SQL Developer v4 eine Tabelle mit einem Feld "Alias" erstellt, die auf eine Oracle 11g Release 2 Express-Datenbank trifft. Meine Auswahl funktionierte, als ich "ALIAS" anstelle von Alias ​​schrieb.
Broken_Window
Versuchen Sie, einen Trigger für eine Tabelle mit einem Namen zu erstellen, der gegen ORA-30507 verstößt (z. B. DATABASE).
Fleuv
Versuchen Sie es in Großbuchstaben "TABELLE".
RSHAP
34

Oracle benötigt normalerweise doppelte Anführungszeichen, um den Namen von Bezeichnern in SQL-Anweisungen abzugrenzen, z

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

Es erlaubt jedoch freundlicherweise, die doppelten Anführungszeichen wegzulassen. In diesem Fall konvertiert es den Bezeichner leise in Großbuchstaben:

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

wird intern konvertiert in etwas wie:

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

doppelte Anführungszeichen funktionierten in Oracle, als ich das Schlüsselwort als einen der Spaltennamen hatte.

z.B:

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

Oracle verwendet doppelte Anführungszeichen, aber Sie müssen den Objektnamen höchstwahrscheinlich in Großbuchstaben setzen, z. B. "TABLE". Wenn Sie ein Objekt ohne doppelte Anführungszeichen erstellen, z

CREATE TABLE table AS ...

Oracle würde das Objekt als Großbuchstaben erstellen . Bei der Referenzierung wird jedoch nicht zwischen Groß- und Kleinschreibung unterschieden, es sei denn, Sie verwenden doppelte Anführungszeichen!

Andrew nicht der Heilige
quelle
-8

Sie müssen die Spalte in einen anderen Namen umbenennen, da dies TABLEvon Oracle reserviert wird.

Sie können alle reservierten Wörter von Oracle in der Orakelansicht sehen V$RESERVED_WORDS.

oualid
quelle
Ich bekomme, ORA-00942wenn ich es versuche select * from V$RESERVED_WORDS.
Ceving