0

pl/sql 関数 substr は、たとえばsubstr('some text', 1, 4)、4 文字を超えるデータ型を返します。

以下が機能しない理由を理解するのが難しい:

rowTxt VARCHAR2(60);
rowTxt := substr(text, (pos + 1), 60);

いつも私は例外を得ました

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

誰か理由を教えてください。

乾杯ヒルデ

4

2 に答える 2

3

おそらくこれは nls_length_semantics に関係しています。

Varchar2(60) は 60 文字を意味する場合がありますが、60 バイトを意味する場合もあります。nls_length_semantics が BYTE に設定されている場合、60 バイトを意味します。

SUBSTR(,1,60) は 60 文字を返します。これらの文字の 1 つ以上が 1 バイトを超える場合、例外が発生します。

これを試すには、文字列を VARCHAR2(60 CHAR) として宣言します。

http://www.oracle-base.com/articles/9i/character-semantics-and-globalization-9i.php

于 2013-01-28T09:06:39.270 に答える
1

結果のサイズは、パラメーターから推測されません。多くの場合、とにかくそれは不可能です。

これを解決するには、Cast(substr(text, (pos + 1), 60) as varchar2(60)) を使用します。

于 2013-01-28T08:47:56.203 に答える