📅  最后修改于: 2023-12-03 15:42:24.931000             🧑  作者: Mango
在Oracle数据库中,游标(cursor)是对一组数据结果集的单独处理,类似于程序中的数组或者列表。可以通过游标来遍历结果集中的每一行数据。
Oracle的游标可以分为隐式游标和显式游标。
隐式游标是Oracle数据库在执行一条SQL语句时创建的默认游标。当程序执行SELECT语句查询数据时,Oracle内部会自动创建一个隐式游标,从而遍历查询到的数据集合。
隐式游标的使用方法非常简单,只需要在PL/SQL块中使用SELECT语句即可。下面是一个使用隐式游标的例子:
DECLARE
v_ename employees.ename%TYPE;
v_sal employees.sal%TYPE;
BEGIN
SELECT ename, sal INTO v_ename, v_sal
FROM employees
WHERE empno = 7369;
DBMS_OUTPUT.PUT_LINE('Name: ' || v_ename || ', Salary: ' || v_sal);
END;
在以上示例中,我们没有声明游标,也没有显式地打开游标。Oracle数据库会自动为我们创建游标,从而查询到所需要的数据。
显式游标则需要程序员自己去创建、打开、检索、关闭游标。显式游标需要通过DECLARE、OPEN、FETCH、CLOSE等关键字来进行声明和操作。
显式游标允许程序员对游标执行更加精细的控制和管理。如果需要多次访问结果集合中的数据,或者需要进行更为复杂的数据处理,显式游标将更加适合。
下面是一个使用显式游标的例子:
DECLARE
CURSOR c_emp IS SELECT empno, ename, job, sal
FROM employees
WHERE job = 'SALESMAN';
v_empno employees.empno%TYPE;
v_ename employees.ename%TYPE;
v_job employees.job%TYPE;
v_sal employees.sal%TYPE;
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO v_empno, v_ename, v_job, v_sal;
EXIT WHEN c_emp%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Empno: ' || v_empno || ', Name: ' || v_ename || ', Job: ' || v_job || ', Salary: ' || v_sal);
END LOOP;
CLOSE c_emp;
END;
以上的示例中,我们创建了一个显式游标c_emp,通过OPEN、FETCH、CLOSE等操作来获取查询结果集中的数据。相比于隐式游标,显式游标能够提供更为丰富的API,以便我们更好地管理和控制游标。