7

Oracleには、CLOBフィールドからのバイト数に基づいて部分文字列を取得する方法がありますか?

select DBMS_LOB.SUBSTR(a.COMMENTS, 3998, 1)
FROM FOO;

エラーが発生しています:

「ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます」

. 問題は特殊文字にありました。新しい特殊文字はそれぞれ8バイトかかるため、文字列の制限を3992に減らすと機能します。

DBMS_LOB.SUBSTR(a.COMMENTS, 3992, 1) works.

テスト目的で、多くの特殊文字を入れましたが、同じエラーがスローされます。

オラクルには、文字数よりもバイト数に基づいて部分文字列を見つける方法がありますか?

実際には、テーブルからデータをフェッチしており、4000 文字の制限で UI に表示する必要があります。したがって、最初の 4000 文字のみをフェッチします。文字サイズは1バイトなので、4000バイトまで対応できます。そのため、 を使用するDBMS_LOB.CONVERTTOBLOBと、取得した文字列を正しく表示できない場合があります。どうにかして文字列に戻すことはできますか?

4

4 に答える 4

0

この方法を試してください::

この結果を取得するには、Oracle 関数LENGTHB()を使用します。DBMS_LOB.CONVERTTOBLOBを使用してCLOBBLOBに変換し、 DBMS_LOB.GET_LENGTH()を使用する方法があります。これはバイト数を返しません。

このスレッドを使用して完全な回答を得ることができます :: https://forums.oracle.com/forums/thread.jspa?threadID=2133623

于 2012-12-11T11:41:51.890 に答える