对于非查询语句,如修改、删除操作,OceanBase 数据库会自动地为这些操作设置游标并创建其工作区,这些由系统隐含创建的游标称为隐式游标,隐式游标的名字为 SQL,这是由 OceanBase 系统定义的。对于隐式游标的操作,如定义、打开、取值及关闭操作,都由 OceanBase 系统自动地完成,无需用户进行处理。用户只能通过隐式游标的相关属性,来完成相应的操作。在隐式游标的工作区中,所存放的数据是与用户自定义的显示游标无关的,而是最紧处理的一条 SQL 语句所包含的数据。

    要隐式的使用游标,可以对游标使用 FOR LOOP 语句。语法格式如下:

    1. FOR record_name IN cursor_name LOOP
    2. statement
    3. [ statement ]...
    4. END LOOP;

    隐式游标属性如下:

    • SQL%FOUND 布尔型属性,当最近一次读记录时成功返回,则值为 TRUE。

    • SQL%NOTFOUND 布尔型属性,与 %FOUND 相反。

    • SQL%ROWCOUNT 数字型属性, 返回已从游标中读取得记录数。

    • SQL%ISOPEN 布尔型属性, 取值总是 FALSE。SQL 命令执行完毕立即关闭隐式游标。

    如下示例为,删除 employees 表中某部门的所有员工,如果该部门中已没有员工,则在 departments 表中删除该部门。

    1. obclient> DECLARE
    2. -> V_dept_id employees.department_id%TYPE := 110;
    3. -> BEGIN
    4. -> DELETE FROM employees WHERE department_id=V_dept_id;
    5. -> IF SQL%NOTFOUND THEN
    6. -> DELETE FROM departments WHERE department_id=V_dept_id;
    7. -> END IF;
    8. -> END;
    9. -> /
    10. Query OK, 0 rows affected (0.02 sec)