我以不同的方式尝试了以下代码,比如去掉while或if,但是当我把它们放在一起(if和while)时,我总是在最后得到错误。。。
undefine numero
set serveroutput on
accept numero prompt 'Type # between 100 and 999: '
declare
i number:=1;
a char(25);
b char(1);
c varchar2(10);
d number;
begin
c := №
d := length(c);
b := substr(c, i, 1);
while i <= d loop
if b = '1' then
a:= a||'one ';
end if;
i := i+1;
end loop;
dbms_output.put_line('The number is '||a);
end;
/
错误:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 13
06502. 00000 - "PL/SQL: numeric or value error%s"
通过将变量“a”的声明方式更改为:
a varchar2(2000);
*注意,这里的显著变化是使用VARCHAR2而不是CHAR(不是更大的长度)。根据@user272735的回答,这是关键。
如果csv文件中有错误或意外的等式,也可能发生这种情况。i、 e-csv文件中的一个单元格以等号(=)(excel公式)开头,这将反过来引发错误。如果您通过去掉等号来修正或删除这个等式,它应该可以解决ORA-06502错误。
CHAR
是一种固定长度的数据类型,使用尽可能多的空间。所以a:=a | | |“一”
将需要比可用空间更多的空间。您的问题可以归结为以下示例:
declare
v_foo char(50);
begin
v_foo := 'A';
dbms_output.put_line('length of v_foo(A) = ' || length(v_foo));
-- next line will raise:
-- ORA-06502: PL/SQL: numeric or value error: character string buffer too small
v_foo := v_foo || 'B';
dbms_output.put_line('length of v_foo(AB) = ' || length(v_foo));
end;
/
切勿使用
char
。有关基本原理,请检查以下问题(同时阅读链接):
Oracle数据类型:我应该使用VARCHAR2还是CHAR
PL/SQL:数字或值错误:字符串缓冲区太小
是由于您声明一个字符串为固定长度(例如20),并且在代码中的某个点为其分配了一个长度超过您声明的值。
例如:
myString VARCHAR2(20);
myString :='abcdefghijklmnopqrstuvwxyz'; --length 26
你会犯这样的错误吗
我在下面的字段上得到字符串缓冲区太小的错误。 位于导致错误的select语句中。它是数据类型。
我得到这样的错误:错误:ORA-06502:PL/SQL:数值或值错误:字符串缓冲区太小
我完全震惊了,不明白我需要做什么来修复这个错误。我有一个plsql过程,它接受一个varchar2字符串和一个OUT参数,这是一个数字。你能帮我学习plsql和php吗。 member_name列类型为VARCHAR2(100),member_id为NUMBER(20) 我从php执行上述存储过程,如下所示 这是我在php中看到的输出 字符串整数警告:oci_execute()[function.
我在游标循环中连接varchar2数据类型时遇到了问题。 过程在循环中迭代,以生成用于批处理的插入和删除操作的in子句。该过程将对每1000个帐号批处理运行。 有没有其他方法可以做到这一点?
有没有办法在mybatis结果映射中指定一个字符串最多应包含20个字符?或者如何设置精度,如数字(4,2)? 例如,我有一个如下所示的结果图: 我可以将int的位数限制为只有1,在浮点数上的“.”后面显示N个元素,或者将字符串大小限制为一定的数字吗? 我正在处理的视图具有以下列结构: 编辑1:每当我试图调用存储过程在此视图中添加新项时...我会得到这个错误: 我创建了一个用于测试的类,该类尝试调用
在函数中,我在这一行上有ORA-06502错误: 我看这里没有任何转换问题/完全困惑/