[ Oracle ] テーブル名やカラム名にSQL予約語を使用する

Pocket

まず始めに言いますが、Oracle に限らず SQL の予約語をテーブル名やカラム名に使用することは止めておくべきでしょう。使用することによるメリットよりもデメリットが大きすぎると思います。おそらくデメリットを理解した上で使用する人は M なんだと思います。

スポンサーリンク

テーブル名やカラム名に SQL 予約語を使用する

Oracle で、テーブル名やカラム名に SQL で予約されている 「 select 」や 「 order 」 等の文字列を使用するには、ダブルクォート” ) で括ります。括らないと次の ORA-ERROR が発生します。

ORA-00903 表名が無効です。
ORA-00904 無効な識別子です。
ORA-00936  式がありません。

// 正常にテーブルが作成される
CREATE TABLE "ORDER"
(
    "BY"   CHAR(1)
)

// ORA-00903 表名が無効です。(テーブル名がクォートされていない場合)
// または
// ORA-00904 無効な識別子です。(カラム名がクォートされていない場合)
CREATE TABLE ORDER
(
    BY     CHAR(1)
)

テーブルの作成時だけではなく、select 文などのクエリを発行するときにも、予約語を使用したテーブル名やカラム名をダブルクォートで括る必要があります。つまり、何から何まで全ての場合に対応が必要です。

// 正常
select * from "SELECT" where "ORDER" = '1'

// 異常
// ORA-00903 表名が無効です。(テーブル名がクォートされていない場合)
// または
// ORA-00936 式がありません。(カラム名がクォートされていない場合)
select * from SELECT where ORDER = '1'

MySQL の場合

Oracle データベースをはじめ多くのデータベースでは、標準 SQL に従い識別子区切り文字として ダブルクォート (“) を使用していますが、MySQL では、デフォルトでバッククォート (`) を区切り文字として使用しています。

参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *