Oracleで予約語をエスケープするにはどうすればよいですか?


134

TSQLではSelect [table] from tablename、「テーブル」という名前の列を選択するようなものを使用できます。

Oracleで予約語に対してこれを行うにはどうすればよいですか?

編集:私は角括弧、二重引用符、単一引用符、および逆引用符を試してみましたが、機能しません...

さらなる明確化として、私は誰かがコメントと名付けたコラムを持っています。これは予約語であるため、オラクルはそれを使って選択しようとするふらふらと動揺し、クエリの解析時に失敗します。テーブル名から「コメント」を選択しようとしましたが、うまくいきませんでした。ケースをチェックして戻ってきます。


回答:


195

クイック検索から、Oracleは二重引用符("など"table")を使用しているように見え、大文字小文字の区別が必要なようです。一方、興味がある人は、互換性のために二重引用符を使用するように設定されている場合を除いて、MySQLはデフォルトでバッククォート( `)を使用します。


2
二重引用符を使用して単語をエスケープしようとしましたが、機能しませんでした。
スペンス、

13
デフォルトでは、Oracleはすべての識別子を大文字にします。したがって、小文字または特殊文字が必要な場合、または識別子がOracleの予約語である場合は、二重引用符で囲む必要があります。二重引用符は大文字と小文字を保持するため、識別子も正しい大文字小文字である必要があります。
メトロ

Oracle 11gリリース2 ExpressデータベースにアクセスするSQL Developer v4を使用して、フィールド "alias"を持つテーブルを作成しました。エイリアスの代わりに「ALIAS」と書いたとき、私の選択はうまくいきました。
Broken_Window 2016年

トリガーに対して機能しない場合は、ORA-30507に違反する名前(例:DATABASE)の名前でテーブルのトリガーを作成してください。
Fleuv

すべて大文字の「TABLE」で試してください。
RSHAP 2018

34

Oracleは通常、SQLステートメントで識別子の名前を区切るために二重引用符を必要とします。

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

ただし、二重引用符を省略できるため、識別子を静かに大文字に変換できます。

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

内部的に次のようなものに変換されます:

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

8

列名の1つとしてキーワードを使用すると、Oracleで二重引用符が機能しました。

例えば:

select t."size" from table t 

3

Oracleは二重引用符を使用しますが、ほとんどの場合、オブジェクト名を大文字で指定する必要があります(例: "TABLE")。デフォルトでは、二重引用符なしでオブジェクトを作成すると、たとえば

CREATE TABLE table AS ...

Oracleは、オブジェクトを大文字で作成します。ただし、二重引用符を使用しない限り、参照では大文字と小文字が区別されません。


-8

TABLEOracleによって予約されているため、列の名前を別の名前に変更する必要があります。

Oracleのすべての予約語は、oracleビューで確認できますV$RESERVED_WORDS


私がORA-00942しようとすると得select * from V$RESERVED_WORDSます。
2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.