尝试创建包含过程的包时出现错误。我需要创建一个全局游标以及 2 个过程和一个函数。
下面是我试图回答的问题。编写一个名为 cursor_state 的包,将全局游标声明为 EMPLOYEES 和 DEPARTMENTS 的连接。光标应该选择每个员工的名字和姓氏、部门名称和员工的薪水。该包还应包含三个公共过程:第一个打开游标;第二个具有 NUMBER 类型的 IN 参数,并获取并显示行数以及循环计数器的当前值。第三个过程关闭游标。请记住在尝试在每个过程中打开或关闭光标之前测试光标的状态。
和我想出的代码
CREATE OR REPLACE PACKAGE cursor_state IS
CURSOR emp_curs IS
SELECT first_name, last_name, department_name, salary
FROM employees, departments
WHERE employees.department_id = departments.department_id;
PROCEDURE open_curs;
FUNCTION fetch_rows RETURN BOOLEAN;
PROCEDURE close_curs;
END cursor_state;
这是身体的创造
CREATE OR REPLACE PACKAGE BODY cursor_state IS
PROCEDURE open_curs IS
BEGIN
IF NOT emp_curs%ISOPEN THEN OPEN emp_curs;
END IF;
END open_curs;
FUNCTION fetch_rows(n NUMBER := 1) RETURN BOOLEAN IS
emp_first employees.first_name%TYPE,
emp_last employees.last_name%TYPE,
emp_dept employees.department_name%TYPE,
emp_salary employees.salary%TYPE;
BEGIN
FOR count IN 1 .. n LOOP
FETCH emp_curs INTO emp_first, emp_last, emp_dept, emp_salary;
EXIT WHEN emp_curs%NOTFOUND;
DBMS_OUTPUT.PUT_LINE((emp_first), (emp_last), (emp_dept), (emp_salary));
END LOOP;
RETURN emp_curs%FOUND;
END fetch_rows;
PROCEDURE close_curs IS
BEGIN
IF emp_curs%ISOPEN
THEN CLOSE emp_curs;
END IF;
END close_curs;
END cursor_state;
我尝试了许多尝试来更改结束语句的分号和不同位置。无济于事。