-1

このコードを実行しようとしていますが、「THEN」でエラーが発生します。すべてのコードを1行ずつチェックしましたが、エラーはifステートメントにあるようですが、二重にチェックしました。

最初に起こった事故に救急車を送ることができるように、事故の時間を比較しようとしています。助けていただければ幸いです

`create or replace function get_loc return location is
max NUMBER;
CURSOR accident_records IS
SELECT * FROM NEW_ACCIDENT;
accidentRec NEW_ACCIDENT_TYPE := NEW_ACCIDENT_TYPE (NULL,NULL,NULL,NULL);
ac_loc LOCATION := LOCATION (NULL,NULL);
type New_accident_rec_type is record
(
id number,
loc location,
TIME NUMBER,
SITUATION varchar2(60)
);
new_accident_rec New_accident_rec_type;
BEGIN
max:=0;
OPEN accident_records;
LOOP FETCH accident_records INTO new_accident_rec;
EXIT WHEN accident_records%NOTFOUND;
IF new_accident_rec.situation='not handled' then
IF new_accident_rec.time>max THEN
max:=new_accident_rec.time;
accidentRec.time:=new_accident_rec.time;
ac_loc:=new_accident_rec.loc;
END IF;
IF new_accident_rec.time<max THEN
ac_loc:=NULL;
END IF;
END IF;
END LOOP;
CLOSE accident_records;
dbms_output.put_line ('The time of Accident is: '||accidentRec.time || 'The location of the accident is: ' ||ac_loc);
RETURN ac_loc;
END;`
4

1 に答える 1

1

問題は、Oracle集計関数maxと競合するという名前のローカル変数があることです。MAX

(Oracle は文字が の後に来ると考えているため、エラーが発生しますが、max代わりTHENに表示されます。私が見るエラーの全文は

LINE/COL ERROR
-------- -----------------------------------------------------------------
22/42    PLS-00103: Encountered the symbol "THEN" when expecting one of
         the following:
         (

(実行する前にコードを再フォーマットした可能性があります。行/列番号が一致しなくても心配しないでください。)

PL/SQL では通常、ローカル変数の前にl_orを付けることをお勧めしますv_。などの Oracle 組み込み関数を回避するだけMAXでなく、ローカル変数と同じ列名との名前の衝突を回避するのにも役立ちます。

max変数の名前を に変更するとl_max、コンパイル エラーが解消されるはずです。

于 2015-05-08T18:47:25.103 に答える