Edited at

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

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