1
DECLARE
v_vendor_id NUMBER;
BEGIN
FOR vp_rec IN (SELECT * FROM vpprocess)
LOOP
SELECT i.vendor_id INTO v_vendor_id FROM item i, lineitems l WHERE l.itemid = i.itemid AND l.id = vp_rec.lineitemid;
EXCEPTION
WHEN no_data_found THEN SELECT 0 INTO v_vendor_id FROM dual;
UPDATE vpprocess SET vendorid = v_vendor_id WHERE vpprocessid = vp_rec.vpprocessid;
END;
END LOOP;
END;
エラーメッセージ
Error starting at line 1 in command:
DECLARE
v_vendor_id NUMBER;
BEGIN
FOR vp_rec IN (SELECT * FROM vpprocess)
LOOP
SELECT i.vendor_id INTO v_vendor_id FROM item i, lineitems l WHERE l.itemid = i.itemid AND l.id = vp_rec.lineitemid;
EXCEPTION
WHEN no_data_found THEN SELECT 0 INTO v_vendor_id FROM dual;
UPDATE vpprocess SET vendorid = v_vendor_id WHERE vpprocessid = vp_rec.vpprocessid;
END;
END LOOP;
END;
Error report:
ORA-06550: line 7, column 9:
PLS-00103: Encountered the symbol "EXCEPTION" when expecting one of the following:
begin case declare end exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
ORA-06550: line 11, column 7:
PLS-00103: Encountered the symbol "LOOP" when expecting one of the following:
;
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
Dan:私はLOOPを置き換えようとしましたが、それは助けになりませんでした。私はエラーと同様にクエリを更新しています。 –
私の回答を更新しました。私はオラクルを私の目の前にはもはや持っていないので、これは推測です。しかし、基本的に 'EXCEPTION WHEN'はブロックスコープの機能なので、例外をトラップしたいステートメント(あなたの場合は単一のステートメント)の周りにインナーブロックを作成する必要があります。 – Dan