5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

oracle CLOBの項目のバイト数を計算するテクニック

Last updated at Posted at 2018-07-09

oracle 11g

CLOBの項目のバイト数を取得する

LENGTHB関数を使うと

sample.SQL
SELECT 
 LENGTHB(CLOB_COLUMN)
FROM
 TABLE

ORA-22998: マルチバイトのキャラクタ・セットのCLOBまたはNCLOBはサポートされていません
CLOB型に対するLENGTHBはサポートしていないとのこと

CHAR型に変換してからLENGTHBを使うと

sample.SQL
SELECT 
 LENGTHB(TO_CHAR(CLOB_COLUMN))
FROM
 TABLE

ORA-64203: 宛先バッファは、キャラクタ・セット変換後のCLOBデータを保持するには小さすぎます。
CHARに変換しようとしたが、LOBサイズがCHAR型のバッファ制限を超えているとのこと

ならばSUBSTR関数で区切って計算してしまえばいい

sample.SQL
SELECT 
 LENGTHB(TO_CHAR(SUBSTR(CLOB_COLUMN,1,1000))) + 
 LENGTHB(TO_CHAR(SUBSTR(CLOB_COLUMN,1001,1000))) + 
 ...
FROM
 TABLE

これでうまくいった

なおCLOBの文字数はこちらで取得できる

sample.SQL
SELECT 
 DBMS_LOB.GETLENGTH(CLOB_COLUMN)
FROM
 TABLE

残念ながら
DBMS_LOB.GETLENGTHBはサポートされていない

あと文字数*2でいいじゃんっていう記事を見つけたけど
マルチバイト・キャラクタセット的に間違いだと思う
https://www.shift-the-oracle.com/config/multibyte-characterset.html

5
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?