我创建了记录,游标和此函数,但我不知道如何调用它。你能帮我吗?
DECLARE
TYPE EmpRecTyp IS RECORD (
emp_id NUMBER(6),
salary NUMBER(8,2));
CURSOR desc_salary RETURN EmpRecTyp IS
SELECT employee_id, salary FROM employees ORDER BY salary DESC;
emp_rec EmpRecTyp;
FUNCTION nth_highest_salary (n INTEGER) RETURN EmpRecTyp IS
BEGIN
OPEN desc_salary;
FOR i IN 1..n LOOP
FETCH desc_salary INTO emp_rec;
END LOOP;
CLOSE desc_salary;
RETURN emp_rec;
END nth_highest_salary;
BEGIN
NULL;
END;
/
答案 0 :(得分:0)
您测试过吗?
Begin
emp_rec := nth_highest_salary(1);
End;
问题是,如果要全局使用此功能,则也必须全局定义该类型。
还需要根据您的oracle版本来初始化记录变量。
答案 1 :(得分:0)
FUNCTION nth_highest_salary (n INTEGER) RETURN EmpRecTyp IS
TYPE EmpRecTyp IS RECORD (
emp_id NUMBER(6),
salary NUMBER(8,2));
CURSOR desc_salary RETURN EmpRecTyp IS
SELECT employee_id, salary FROM employees ORDER BY salary DESC;
emp_rec EmpRecTyp;
BEGIN
OPEN desc_salary;
FOR i IN 1..n LOOP
FETCH desc_salary INTO emp_rec;
END LOOP;
CLOSE desc_salary;
RETURN emp_rec;
END nth_highest_salary;
/
然后
从DUAL中选择nth_highest_salary(n);
答案 2 :(得分:0)
只需声明一个EmpRecTyp变量,您就可以像这样调用函数:
DECLARE
vl_emprectyp EmpRecTyp;
BEGIN
vl_emprectyp := nth_highest_salary(1);
END;
请注意,此代码仅在您的代码块pl / sql的范围内起作用。
答案 3 :(得分:0)
因为您已经将该功能设置为块的局部功能,所以只能在该块内调用它。我建议您在上面的代码中替换
BEGIN
NULL;
END;
使用
BEGIN
emp_rec := nth_highest_salary(1);
END;
好运。