a. Вы не можете использовать Выберите colum1 INTO variable1, colum2 INTO variable2.Он должен выглядеть следующим образом: Выберите column1, column2 INTO variable1, variable 2
b. Создайте тип объекта и используйте его в качестве параметра out в процедуре
c. Оставьте условие опции послевызывается процедура.
Пример кода:
CREATE OR REPLACE TYPE ty_obj_idgrade AS OBJECT
(studentId NUMBER(5)
,studentGrade NUMBER(2,1)
);
CREATE OR REPLACE PROCEDURE return_id_grade(
subjectId IN NUMBER,
semesterYear IN DATE ,
n IN INT,
-- options IN INT
,p_idgrade OUT ty_obj_idgrade) IS
BEGIN
SELECT DISTINCT student_id --INTO studentId,
,grade --INTO studentGrade
INTO p_idgrade.studentId
,p_idgrade.grade
FROM (SELECT studentId
,grade
,dense_rank() over (ORDER BY grade desc) rank
,subject_id
,semester_year
FROM old_students )
WHERE subject_id = subjectId
AND semester_year = semesterYear
AND rank = n
AND rownum <= 1;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('we are inside when others -->'||sqlerrm);
END;
Вызовите вашу процедуру.
Поскольку параметры использовались в качестве параметра IN, они должны быть доступны вне prc / fnc.это можно сделать после вызова prc / fnc. Если options = 1 THEN value: = p_idgrade.conatct Значение ELSE: = p_idgrade.grade END IF;
Надеюсь, это поможет.