10

Oracle 11gを使用していて、テキストの長さを調べようとしています。普段は使ってselect length(myvar) from tableいますが、できません。

クエリしたいテーブルには、BLOB文字や写真を保存する列があります。BLOB自分の列の文字数を知りたいのですが。

BLOBを使用してcharに変換しようとしましたUTL_RAW.CAST_TO_VARCHAR2(myblob) from tableが、この関数が正しく機能していないか、間違いを犯している可能性があります。

例:私BLOBは単語Sectionを持っています。これを16進形式のデータベースで見ると、が表示されますS.e.c.t.i.o.n.。なぜそれが各文字の間にそれらのポイントを持っているのか分かりません。次に、このクエリを使用しました。

select UTL_RAW.CAST_TO_VARCHAR2(myblob) 
from table

このクエリの結果は'S'、私の持っている完全な単語ではないため、このクエリを実行すると次のようBLOBになります。

select length(UTL_RAW.CAST_TO_VARCHAR2(myblob))
from table

結果は18ですが、単語のSections文字数は18文字ではありません。

私はをに変換しようとしていBLOBましたが、保存できるテキストの長さが制限を超えているため、VARCHAR私の最善の選択はだと思います。私はこのクエリを実行してそれを実行しようとしました(これが正しいかどうかはわかりませんが、インターネットで見つけたものです):CLOBVARCHAR

select UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(myblob, 32767, 1))
from table

このクエリはまたを返します'S'

4

4 に答える 4

4
SELECT DBMS_LOB.GetLength( myblob ) length_in_bytes
  FROM table

BLOB の長さをバイト単位で返します。BLOB の文字データはおそらく UTF-16 文字セットを使用してエンコードされているように聞こえるため、バイト数はおそらく文字数の 2 倍になります (使用されている Unicode のバージョンと格納されている特定のデータによっては、文字には 4 バイトのストレージが必要になる場合がありますが、それらの文字を扱っている可能性は比較的低いです)。

このDBMS_LOB.ConvertToClobプロシージャを使用して、BLOB を CLOB に変換できます (ただし、これはプロシージャであるため、PL/SQL ブロックで呼び出す必要があります)。その変換の一環として、ほぼ確実に、データがエンコードされている文字セットを指定する必要があります。アプリケーションで UTF-16 文字セットを使用していると仮定していますが、これは単なる仮定です。

于 2012-10-11T23:36:52.750 に答える