在循环Oracle11g的数值溢出

我有一个在PL / SQL函数像循环:

FOR i IN min..max LOOP

我的变量,最小值,最大值被声明为NUMERIC

在我的案件的最小值和最大值OFEN非常大,但范围本身很小,即:

min = 3232236033 max = 3232236286

正如你看到的范围约为256〜,但这种重视甲骨文抛出一个数值溢出错误,我坚持就如何得到它的工作。

我应该如何遍历这些值?

编辑

好吧,我有一个工作的答案,使用最大/最小差异的循环,但是否真的无法遍历大值在Oracle中?

编辑我检索是错误:

SQL Error: ORA-01426: nadmiar numeryczny ORA-06512: przy "PS.DHCP", linia 88 01426. 00000 - "numeric overflow" *Cause: Evaluation of an value expression causes an overflow/underflow. *Action: Reduce the operands.

代码88行是:

FOR client_ip IN min_host..max_host

min_host,max_host,CLIENT_IP是结果inet_aton (IP的数字表示)

--------------解决方案-------------

看来问题来源于我被铸成得小一些(这似乎PL / SQL的AA故障),你可以改变你的循环类型:

While循环工作正常

set serveroutput on
/
declare
min_val number;
max_val number ;
iterator number ;
begin
min_val := 3232236033 ;
max_val := 3232236286 ;

iterator := min_val;
while iterator<=max_val loop
dbms_output.put_line(iterator);
iterator := iterator + 1;
end loop ;

end;
/

从这里:http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/controlstatements.htm#BABEFFDC

FOR循环索引

for循环语句的索引被隐式声明为整数类型的变量是本地环路。 在循环中的语句可以读取索引值,但不能改变它。 外循环语句不能引用索引。 for循环语句运行后,该指数是不确定的。 (一个循环索引有时也被称为一个循环计数器。)

在例4-17中,for循环语句试图改变其指数值,导致出现错误。

起这样:http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/loop_statement.htm

INDEX_NAME

一个未声明的标识符名称循环索引(有时称为循环计数器)。 它的范围是循环本身; 你不能引用循环外的索引。

INDEX_NAME的隐含声明覆盖环以外的任何其他声明。 要引用另一个变量具有相同的名称,使用标签。 请参见例4-22,“引用全局变量同名作为循环计数器”。

内的循环,该指数被视为就像一个恒定的:它可在表达式显示,但不能被分配​​的值。

因此,即使你在声明的声明“指数”,它没有被环路内使用,而是使用隐式创建索引(这似乎有一个精密太小,你的需要)

可以运行从0循环变量之间的差minmax 。 下面是只写号码DBMS_OUTPUT一个例子:

DECLARE
v_min INTEGER := 3232236033;
v_max INTEGER := 3232236286;
v_diff PLS_INTEGER;
BEGIN
v_diff := v_max - v_min;
FOR i IN 0..v_diff
LOOP
-- Use v_min + i where you would have used i.
dbms_output.put_line(v_min + i);
END LOOP;
END;
/

编辑:可悲的是,你不能使用的范围内操作者通过大量的迭代。 的范围内操作员..限制为范围为+/- 2 31从PL / SQL文档。:

在内部,PL / SQL分配边界来临时PLS_INTEGER变量的值,并且,如有必要,将舍入值到最接近的整数。 一个PLS_INTEGER的幅度范围是-2 ** 31。2 ** 31。 如果一个绑定的取值为范围之外的数字,你会得到一个数值溢出错误时,PL / SQL会尝试分配。

分类:SQL 时间:2015-03-14 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.651 (s). 10 q(s)