Oracleで開発してはまったことまとめ

ようやくOracleを使った開発もひと段落
今までMySQLしか使ったことがなかったのでOracleの不便さを勉強できてとてもためになった気がするのでまとめておきます

1. ORA-00911: 文字が無効です。

使っちゃいけない文字を使っていると出るエラー
mysqlからのデータを突っ込もうとしたときによく起きる

table_name の `が問題だったり(oracleの場合は”)
行末の ; が問題だったりする(;は不要)

または日付を文字列で入れてたりしてもこのエラーが起きるのでおとなしくsysdateに書き直すとよい
はまるのはどの文字が原因なのか詳しく教えてくれないのが原因だったりもする

2. ORA-01758: 必須列(NOT NULL)を追加するには、表を空にする必要があります

mysqlだと普通に出来るがoracleだと出来ない

こういうことがしたい場合は↓の方法がある

  • データをすべて削除してから、実行し直す。
  • NOT NULL 制約なしでカラムを追加し、データを設定した後に、NOT NULL 制約を追加する。

ORACLE/ORA-01758 – centromezzo wiki

※Oracleの人は基本、「データをすべて削除してから、実行し直す。」をするようです。

3. ORA-00972: 識別子が長すぎます。

mysqlでは64バイトまでテーブル名やカラム名が許されていますがOracleは30バイトまで
テーブル名+カラム名+seqなんていう命名規則にすると間違いなく入らなくなります。。

4. ORA-01704: 文字列リテラルが長すぎます

sqlの長さが4000バイトをこえるとエラーに
mysqlのつもりでtext型を1テーブルに複数個作るとクエリの発行が大変

[Oracle] LOBデータの基本的な扱い方|Archive Redo Blog

5. auto_incrementがない

これが一番困ったかもしれない

Oracle オートインクリメント – Google 検索

ぐぐってみると基本的にはトリガーを使いなさいと出てくる

OracleでAutoIncrement – niwaのoracle日記

自分は天邪鬼×トリガーを使いたくなかったのでフレームワーク部分で無理やり吸収した
↓な感じ

ここでもカラム名の文字数で引っかかって色々面倒だった。。30バイトで無理やり切っちゃえばよかったかもしれない

6. limit offsetが大変

Oracleでlimit offsetもどき – よねのはてな

こんな感じに必ずサブクエリが必要になる
自力でsqlを書いていると大変すぎるので、ここはライブラリに全部お任せしました
ただし、サブクエリの中でlimit句が使えなくなってしまってそれはそれで不便に(⊃д⊂)

【送料無料】パーフェクトPHP

【送料無料】パーフェクトPHP
価格:3,780円(税込、送料別)

スポンサーリンク

シェアする

フォローする

コメントを残す

トップへ戻る