我有一个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"
*/
有人可以帮助我吗?
答案 0 :(得分:1)
对于column2 = val2的记录,var1 + 1是否会产生大于数字[8,0]的数字?
您使用“条件”进行查询,但使用“column2 = var2”进行更新。因此,您可能会更新比您想象的更多的行。
答案 1 :(得分:0)
ORA-06502:PL / SQL:数字或值错误字符串 原因:发生算术,数字,字符串,转换或约束错误。例如,如果尝试将值NULL分配给声明为NOT NULL的变量,或者尝试将大于99的整数分配给声明为NUMBER(2)的变量,则会发生此错误。 操作:更改数据,操作方式或声明方式,以便值不会违反约束。
我认为你的错误是第二选择。
答案 2 :(得分:0)
代码正确,编译器问题,sqldeveloper。