对于非查询语句,如修改、删除操作,OceanBase 数据库会自动地为这些操作设置游标并创建其工作区,这些由系统隐含创建的游标称为隐式游标,隐式游标的名字为 SQL,这是由 OceanBase 系统定义的。对于隐式游标的操作,如定义、打开、取值及关闭操作,都由 OceanBase 系统自动地完成,无需用户进行处理。用户只能通过隐式游标的相关属性,来完成相应的操作。在隐式游标的工作区中,所存放的数据是与用户自定义的显示游标无关的,而是最紧处理的一条 SQL 语句所包含的数据。
要隐式的使用游标,可以对游标使用 FOR LOOP 语句。语法格式如下:
FOR record_name IN cursor_name LOOP
statement
[ statement ]...
END LOOP;
隐式游标属性如下:
SQL%FOUND
布尔型属性,当最近一次读记录时成功返回,则值为 TRUE。SQL%NOTFOUND
布尔型属性,与 %FOUND 相反。SQL%ROWCOUNT
数字型属性, 返回已从游标中读取得记录数。SQL%ISOPEN
布尔型属性, 取值总是 FALSE。SQL 命令执行完毕立即关闭隐式游标。
如下示例为,删除 employees 表中某部门的所有员工,如果该部门中已没有员工,则在 departments 表中删除该部门。
obclient> DECLARE
-> V_dept_id employees.department_id%TYPE := 110;
-> BEGIN
-> DELETE FROM employees WHERE department_id=V_dept_id;
-> IF SQL%NOTFOUND THEN
-> DELETE FROM departments WHERE department_id=V_dept_id;
-> END IF;
-> END;
-> /
Query OK, 0 rows affected (0.02 sec)