CREATE OR REPLACE PROCEDURE display_employees_with_cursor AS
-- 声明游标
CURSOR emp_cursor IS
SELECT employee_id, first_name, salary FROM employees;
-- 声明变量来存储从游标中检索的数据
v_employee_id employees.employee_id%TYPE;
v_first_name employees.first_name%TYPE;
v_salary employees.salary%TYPE;
BEGIN
-- 打开游标
OPEN emp_cursor;
-- 循环遍历游标中的每一行
LOOP
-- 从游标中检索数据
FETCH emp_cursor INTO v_employee_id, v_first_name, v_salary;
-- 退出循环的条件:如果没有更多的数据可检索(即游标已到达末尾)
EXIT WHEN emp_cursor%NOTFOUND;
-- 在这里处理每一行的数据。例如,我们可以简单地将它们打印到控制台(注意:在Oracle PL/SQL中,通常不会直接打印到控制台,但这里只是作为示例)
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee_id || ', Name: ' || v_first_name || ', Salary: ' || TO_CHAR(v_salary));
END LOOP;
-- 关闭游标
CLOSE emp_cursor;
EXCEPTION
WHEN OTHERS THEN
-- 异常处理:如果发生任何错误,关闭游标并重新抛出异常
IF emp_cursor%ISOPEN THEN
CLOSE emp_cursor;
END IF;
RAISE;
END display_employees_with_cursor;
Oracle的变量申明弱限制,Pgsql 需要强制先申明后使用。