0

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

誰かが私を助けることができますか?

4

3 に答える 3

1

column2 = val2のレコードの場合、var1 +1の結果がnumber[8,0]よりも大きくなる可能性がありますか?

「condition」を使用してクエリを実行しますが、「column2=var2」を使用して更新します。したがって、予想よりもはるかに多くの行を更新する可能性があります。

于 2012-05-16T11:17:54.687 に答える
0

ORA-06502:PL / SQL:数値または値のエラーstring原因:算術、数値、string、変換、または制約のエラーが発生しました。たとえば、このエラーは、NOT NULLと宣言された変数に値NULLを割り当てようとした場合、またはNUMBER(2)と宣言された変数に99より大きい整数を割り当てようとした場合に発生します。処置:値が制約に違反しないように、データ、データの操作方法、または宣言方法を変更してください。

私はあなたのエラーが2番目の選択肢だと思います。

あなたへの参照エラーORA-06502

于 2012-05-16T11:19:34.967 に答える
0

コードは正しいです。コンパイラ、sqldeveloperに問題があります。

于 2012-05-22T06:05:56.960 に答える