Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle SELECT - Doppelte Anführungszeichen oder keine doppelten Anführungszeichen?

Die Antworten und Links zur Groß- und Kleinschreibung sind korrekt, aber Ihre Situation geht etwas über ein einfaches Fallproblem hinaus, sowohl weil Ihr Spaltenname mit einem Unterstrich begann als auch weil Ihr Kunde das Zitieren anscheinend normalerweise vor Ihnen versteckt.

Wenn Sie versucht haben, eine Tabelle mit einer Spalte namens _id zu erstellen , ohne es zu zitieren, dann würden Sie einen 'ORA-00911:ungültiges Zeichen'-Fehler erhalten, dessen Ursachentext besagt, 'Bezeichner dürfen nicht mit anderen ASCII-Zeichen als Buchstaben und Zahlen beginnen'; was eigentlich auch falsch ist, da es auch nicht mit einer Zahl beginnen darf (zum Beispiel 0_id ergibt 'ORA-00904::ungültige Kennung'). Dies wird durch die Namensregeln für Datenbankobjekte :

Es sieht also so aus, als ob Aqua Data Studio einer Konvention folgt, die Großbuchstabenversion des von Ihnen bereitgestellten Objektnamens in doppelte Anführungszeichen einzuschließen, eine Praxis, die in einem der verlinkten Posts erwähnt wird.

Aus dem, was Sie gezeigt haben, select _id from ... wird an Oracle übergeben als select "_ID" from ... , was in Ordnung ist, wenn der Spaltenname als "_ID" erstellt wurde . Das scheint bei table1 der Fall zu sein , aber table2 wurde als "_id" erstellt - so dass die Nichtübereinstimmung der Groß- und Kleinschreibung den legitimen ORA-00904 generiert, den Sie sehen.

Ihr Client ändert keinen Spaltennamen, der bereits in doppelte Anführungszeichen eingeschlossen ist, also select "_id" from ... aus wird unverändert an Oracle weitergegeben und funktioniert für table2 einwandfrei (würde aber umgekehrt für table1 fehlschlagen ).

Oracle verlangt, dass der Name in doppelte Anführungszeichen gesetzt wird, wenn er nicht den Regeln für Bezeichner ohne Anführungszeichen entspricht und wenn er in Anführungszeichen erstellt wurde - es sei denn, der ursprüngliche Wert in Anführungszeichen war sowieso gültig, dh folgt den Regeln für nicht Anführungszeichen und wurde in Großbuchstaben eingegeben. Da Ihr Spaltenname mit einem Unterstrich beginnt, müssen aus Sicht von Oracle alle Verweise darauf unabhängig von der Groß-/Kleinschreibung in doppelte Anführungszeichen gesetzt werden. Ihr Kunde macht das nur im Hintergrund, wenn Sie es nicht selbst zitiert haben.

Den Ratschlägen anderer zu folgen, Bezeichner in Anführungszeichen zu vermeiden und immer gültige Namen ohne Anführungszeichen zu verwenden, würde solche Probleme vermeiden.