Oracle 12.1 のストアド プロシージャに問題があります。
打撃コードでエラーが発生していますが、2 つの EXCEPTION ステートメントを続けて使用していると思われますか?
私は、レンタル キュー テーブルのキューの位置を更新する偽の小さなオンライン DVD 会社のストアド プロシージャを作成しました。メンバーがこの DVD をキューに既に持っているかどうかを示す IF ステートメントを使用し、キューの位置を更新します。メンバーが既にキューに DVD を持っているかどうかを確認するために、メンバー キューに DVD があるかどうかを確認する SQL Select ステートメントを記述します。ステートメントが DVD を検出すると、それを "dvd_check" に挿入します。DVD が見つからない場合は、DVD_check を 0 に設定します。
また、更新しようとしている行の元のキューの順序を決定する 2 番目の SQL ステートメントもあります。両方のステートメントは、ストアド プロシージャ内で単独でうまく動作しますが、IF ステートメントの前に StoredProcedure でそれらをまとめると、エラーが発生します。
エラー(17,5): PLS-00103: 次のいずれかを予期しているときに、シンボル「EXCEPTION」が発生しました: ( begin case declare end exit for goto if loop mod null... AND
エラー(29,4): PLS-00103: 次のいずれかを予期しているときに、記号「ファイルの終わり」が検出されました: end not pragma final instanceiable order オーバーライド static...
ここに私のコードがあります:
CREATE OR REPLACE PROCEDURE sp_queueorder (
dvdid_sp number,
memberid_sp number,
queueposition_sp number)
IS
dvd_check number;
old_queueposition number;
BEGIN
SELECT dvdid INTO dvd_check FROM rentalqueue
WHERE DVDid = dvdid_sp and memberid = memberid_sp;
EXCEPTION
WHEN no_data_found THEN dvd_check := 0;
SELECT queueposition INTO old_queueposition FROM rentalqueue
WHERE DVDid = dvdid_sp and memberid = memberid_sp;
EXCEPTION
WHEN no_data_found THEN old_queueposition := 0;
IF dvd_check > 0 THEN
UPDATE rentalqueue SET queueposition = queueposition + 1
WHERE memberid = memberid_sp and queueposition >= queueposition_sp AND queueposition <= old_queueposition;
UPDATE rentalqueue SET queueposition = queueposition_sp
WHERE dvdid = dvdid_sp AND memberid = memberid_sp;
END IF;
END;
この問題を解決するのを手伝ってくれてありがとう。