0

我有一个 pl/sql 匿名块的问题。虽然我可以显示通过选择查询获得的变量,但如果我在更新语句中使用它会出现转换错误。

我的代码如下所示:

set serveroutput on

DECLARE

var1 scheme.table.column1%type; /* number[8,0] */
var2 scheme.table.column2%type; /* number[8,2] */

BEGIN

/* return simple value */
select t.column1, t.column2
into var1, var2
from scheme.table t
where <condition>

DBMS_OUTPUT.PUT_LINE('Var1 is: ' || var1 || ' Var2 is:' || var2); /* fine!!*/

update scheme.table
set scheme.table.column1 = var1 + 1
where scheme.table.column2 = var2; /* that is line error*/

END;

/*
ORA-06502: PL/SQL: error : error de conversión de carácter a número numérico o de valor
ORA-06512: en línea 58
06502. 00000 -  "PL/SQL: numeric or value error%s"
*/

有人可以帮助我吗?

4

3 回答 3

1

对于 column2=val2 的记录,var1+1 是否会导致一个大于 number[8,0] 的数字?

您使用“条件”进行查询,但使用“column2=var2”进行更新。因此,您更新的行可能比您想象的要多得多。

于 2012-05-16T11:17:54.687 回答
0

代码正确,编译器问题,sqldeveloper。

于 2012-05-22T06:05:56.960 回答
0

ORA-06502 PL/SQL:数字或值错误字符串原因:发生算术、数字、字符串、转换或约束错误。例如,如果尝试将值 NULL 分配给声明为 NOT NULL 的变量,或者尝试将大于 99 的整数分配给声明为 NUMBER(2) 的变量,则会发生此错误。行动:改变数据,它是如何被操纵的,或者它是如何被声明的,这样值就不会违反约束。

我认为你的错误是第二选择。

参考你错误 ORA-06502

于 2012-05-16T11:19:34.967 回答