函数substr返回大于声明的数据类型

时间:2013-01-28 08:44:10

标签: oracle plsql

pl / sql函数substr,例如substr('some text', 1, 4)返回数据类型 大于4个字符。

我很难理解为什么以下不起作用:

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

我一直有异常

  

ORA-06502:PL / SQL:数字或值错误:字符串缓冲区太小

任何人都可以给我一些理由吗?

干杯希尔德

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

不从参数推断结果的大小。在许多情况下无论如何都是不可能的。

使用Cast(substr(text,(pos + 1),60)作为varchar2(60))来解决这个问题。