Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

wagase
誰ひとりきみの代わりはいないけど上位互換が出回っている。 Twitterフォローされると喜びます。
https://twitter.com/wagase
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away