PL / SQL:数字或值错误%s错误将字符转换为数字

时间:2012-05-16 11:11:15

标签: plsql

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

我的代码如下所示:

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"
*/

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

对于column2 = val2的记录,var1 + 1是否会产生大于数字[8,0]的数字?

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

答案 1 :(得分:0)

ORA-06502:PL / SQL:数字或值错误字符串 原因:发生算术,数字,字符串,转换或约束错误。例如,如果尝试将值NULL分配给声明为NOT NULL的变量,或者尝试将大于99的整数分配给声明为NUMBER(2)的变量,则会发生此错误。 操作:更改数据,操作方式或声明方式,以便值不会违反约束。

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

reference to you error ORA-06502

答案 2 :(得分:0)

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