2011年9月4日日曜日

[メモ] [Oracle] Long型に32760バイトを超える文字列


  • OracleのLong型を使用している場合に、そのフィールに格納されるデータが当初32760バイトを超えない想定であったものが、32760バイトを超えるようになると色々考慮するところが出てくる
  • 保守をしていて、テーブル定義のLong型をCLOBなどに変換できない状況で、Long型を使用せざるを得ないとき用のメモ
  • OracleのLong型は2Gバイトまでのデータを格納できる
  • PL/SQL のLong型は32760バイトまでしか格納できない
  • PL/SQLで32760バイトを超えるデータをOracleから取り出してLong型に格納できない。変数定義に%TYPEを使ってデータ型を他文字列型のように扱ってるといつかどこかでやられる
  • JavaからLong型に値を格納する場合にPreparedStatment#setStringを用いると32766文字までしかセットできない(バイトではないのでOracle側の文字コードがShift_JISやEUC-JPであれば、32kバイト以上格納できる)
  • それ以上の場合はPreparedStatment#setCharacterStreamを使用する。というかLong型に値をセットする場合はこっちを使う
  • Common SQL Environment を用いてLong型を参照した場合、格納されている文字列が32kバイト以下なら参照できる。32kバイトを超えると何も表示されなくなる
  • Accessのテーブルリンクを用いてLong型を参照した場合、32kバイトを超えても参照できる。おそらくメモ型の上限までは参照できる。ただしフォームやレポートのコントロールには文字数制限がある。制限文字数はAccessのバージョンによって異なる。
  • メモ型はAccessのSQL関数にも渡せるのでLong型のLengthも取れる

0 件のコメント:

コメントを投稿