1

Oracle から「ORA-06502: PL/SQL: 数値または値のエラー: 文字から数値への変換エラー ORA-06512: 行 15 06502 で発生しました。00000 - "PL/SQL: 数値または値のエラー %s」というエラーが表示されます。

DECLARE
idnumber NUMBER(10);
initials VARCHAR2(100);
userid VARCHAR2(100);
old_initials VARCHAR2(100);
CURSOR cursor1 IS
SELECT  s_first, s_last FROM tst_student ORDER BY s_first;
student cursor1%ROWTYPE;
BEGIN
FOR student IN cursor1 LOOP
idnumber :=1;
old_initials := SUBSTR(student.s_first,1,1) || SUBSTR(student.s_last,1,1);
initials := SUBSTR(student.s_first,1,1) || SUBSTR(student.s_last,1,1);
IF initials = old_initials THEN
userid := old_initials || '00' || idnumber + 1;
ELSE idnumber := 1;
END IF;
DBMS_OUTPUT.PUT_LINE(userid);
END LOOP;
END;

それが不平を言っている行は userid := old_initials || です。'00' || ID 番号 + 1;

ありがとう

4

2 に答える 2

0

その行を次のように変更します。

userid := old_initials || '00' || (idnumber + 1); -- use brackets around the calculation


問題は、Oracle が連結されたテキストを数値に追加しようとしていることです1。つまり、Oracle は元の行を次のように解析しています。userid := (old_initials || '00' || idnumber) + 1

于 2012-11-19T02:21:22.327 に答える
0

user_idが数値フィールドであると仮定すると、次のようto_numberに文字列を数値に変換するために使用します。

 userid := to_number(old_initials || '00' || (idnumber + 1));

varcharタイプの場合、

 userid := old_initials || '00' || (idnumber + 1);

EDIT : 増分するには、NUMBER の場合:

  idnumber := idnumber +1;
  userid := to_number(old_initials || '00' ||idnumber );

VARCHAR の場合:

 idnumber := idnumber +1;
 userid := old_initials || '00' || idnumber + 1;

EDIT1 : 修正されたセグメント:

  idnumber :=1;
  old_initials := '';
  FOR student IN cursor1 LOOP
    initials := SUBSTR(student.s_first,1,1) || SUBSTR(student.s_last,1,1);
    IF initials = old_initials THEN
      idnumber := idnumber +1;
      userid := old_initials || '00' || idnumber;
     ELSE 
      idnumber := 1; 
      old_initials := initials;
    END IF;
    DBMS_OUTPUT.PUT_LINE(userid);
   END LOOP;
  END;
于 2012-11-19T02:24:59.453 に答える