0
studentIDを入力として受け入れる関数内でGPAを計算しようとしています。私の問題は、変数lv_gpa_calc
がループがカーソルセットを介して機能するときに、それ自体に追加されていないということです。私はDBMS_OUTPUT.PUT_LINE
を追加してカーソルが正しく設定されていることを確認し、lv_gpa_calc
の正しい個々の行の値を画面に表示しますが、SQLブロックの関数で返されたときは追加されませんこれらの値はすべて一緒になります。 CURSOR FOR LOOP内で変数を自分自身に設定することはできませんか?PLループ用SQLカーソル:同じ変数に値を加算して合計を出力します
更新:lv_gpa_calc
を初期化すると、変数値が自分自身に追加されていない問題が修正されました。
CREATE OR REPLACE
FUNCTION CALCULATE_GPA
(p_studentID IN number)
RETURN NUMBER
IS
CURSOR cur_gpa IS
SELECT grade, grade_value, credit_hours
FROM grade
JOIN enrollment USING (Grade)
JOIN section USING (term_code, subject_code, course_number, section)
JOIN course USING (subject_code, course_number)
WHERE student_ID = p_studentID;
lv_gpa_calc NUMBER(4,2):=0;
BEGIN
FOR rec_gpa IN cur_gpa LOOP
lv_gpa_calc:= lv_gpa_calc + ((rec_gpa.grade_value * rec_gpa.credit_hours)/rec_gpa.credit_hours);
DBMS_OUTPUT.PUT_LINE(lv_gpa_calc);
END LOOP;
RETURN lv_gpa_calc;
END CALCULATE_GPA;
入力いただきありがとうございます!感謝します。 BEGINセクションが0になる前に変数を初期化しなければならない理由や、それを動作させるための何らかの値を知っていますか? – arooney88
初期化されていなければ、値はNULLです。次に、(sumのように2つのオペランドを持つ)ほとんどのバイナリ演算はNULL値を返します。 – kpater87