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 个字节,则会出现异常。

要尝试此操作,请将您的字符串声明为 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 回答