pl / sql函数substr,例如substr('some text', 1, 4)
返回数据类型
大于4个字符。
我很难理解为什么以下不起作用:
rowTxt VARCHAR2(60);
rowTxt := substr(text, (pos + 1), 60);
我一直有异常
ORA-06502:PL / SQL:数字或值错误:字符串缓冲区太小
任何人都可以给我一些理由吗?
干杯希尔德
答案 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))来解决这个问题。