【发布时间】:2019-07-05 01:27:16
【问题描述】:
我正在尝试创建一个在单个表中返回 2 个不同列的函数,有人可以帮我吗?
我已经尝试过这种方式:
CREATE FUNCTION return_id_grade(subjectId IN NUMBER, semesterYear IN DATE , n IN INT, option IN INT)
RETURN NUMBER
IS studentId NUMBER(5),
IS studentGrade NUMBER(2,1);
BEGIN
SELECT DISTINCT student_id INTO studentId,
grade INTO studentGrade
FROM (SELECT studentId, grade, dense_rank() over (ORDER BY grade desc) rank FROM old_students)
WHERE subject_id = subjectId
AND semester_year = semesterYear
AND rank = n
AND rownum <= 1
CASE
WHEN option = 1 then RETURN(student_id)
WHEN option = 2 then RETURN(grade)
END;
END;
我希望输出大学班级的n'NTH成绩和学生ID,但实际只能输出参数字段上接收到的选项。
【问题讨论】:
-
快速阅读:你不见了;在 SELECT INTO 语句之后。然后,带有 RETURN 语句的 CASE 表达式应该是相反的:
RETURN CASE WHEN option = 1 then student_id WHEN option = 2 then grade END; -
你说得对,我错过了...谢谢...
-
另外,您有两个
is关键字。这是一个缩进大小。通常人们使用 2 或 4 个空格。
标签: oracle plsql oracle11g stored-functions