PL/SQL 游标(cursor)的使用

您所在的位置:网站首页 基本工资的作用是什么 PL/SQL 游标(cursor)的使用

PL/SQL 游标(cursor)的使用

2024-01-14 18:34| 来源: 网络整理| 查看: 265

初印象:假设你要用PL/SQL查询某个部门的所有员工的姓名和工资,就要用到游标。

先看一个小例子,然后带着问题去了解游标。

要求:打印部门号是80的所有员工的工资。

declare v_sal emp.salary%type; v_empid emp.employee_id%type; //定义游标 cursor emp_sal_cursor is select salary,employee_id from emp where dept_id=80; begin //打开游标 open emp_sal_cursor; //提取游标 fetch emp_sal_cursor into V_sal,employee_id; while emp_sal_cursor%found loop dbms_output.put_line('姓名:'||v_empid||'工资是:'||v_sal); fetch emp_sal_cursor into V_sal,employee_id; end loop; //关闭游标 close emp_sal_cursor; end;

其实上面这么多代码等价于:

SQL>select employee_id,salary from emp where dept_id=80; 1.什么是游标? 官方定义:

游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。

通俗的说:

游标是一段私有的工作区,也就是一段内存区域,用于暂时存放受SQL语句影响的数据。通俗理解就是将受影响的数据暂时放到一个内存区域的虚表中,而这个虚表就是游标。

加深理解:

1.PL/SQL中,游标是用来处理多条数据的。

2.游标是一个指向上下文的句柄(handle)或指针。

3.游标能遍历结果集中的所有行,但他一次只指向一行。

2.游标的作用:

1.数据库是具有回滚功能的,游标在其中有重要的作用。由于对数据库的操作会暂时放在游标中,只要在提交的时候出现异常,我们就可以根据游标就行回滚,在一定意义上有利于数据库的安全。

2.在Oracle中,PL/SQL只能返回单行数据,而游标的出现,可以返回多条数据。

3.游标的属性: 属性返回值意义%rowcount整型代表增删改语句成功执行的数据行数%foundboolean返回true,代表插入、删除、更新或单行查询操作成功%notfoundboolean返回true,代表插入、删除、更新或单行查询操作失败%isopenboolean游标是否打开 4.使用游标的四个步骤: 步骤关键词说明1在DECLARE中cursor声明游标2Open打开游标3Fetch取出游标中的一条记录装入变量4Close关闭游标 5.游标的类型:

游标的类型分为两种:显示游标和隐式游标。

(1)隐式游标:

隐式游标是oracle自动创建的,执行以下操作会使用隐式游标:

插入操作:INSERT。 更新操作:UPDATE。 删除操作:DELETE。 单行查询操作:SELECT … INTO …

注意:通过SQL游标名总是只能访问前一个插入、删除、更新操作或单行SELECT操作的游标属性。所以通常在刚刚执行完操作之后,立即使用SQL游标名来访问属性。

【小例子】: 使用隐式游标的属性,判断对雇员工资的修改是否成功。

步骤1:输入和运行以下程序:

SET SERVEROUTPUT ON BEGIN UPDATE emp SET sal=sal+100 WHERE empno=1234; IF SQL%FOUND THEN DBMS_OUTPUT.PUT_LINE('成功修改雇员工资!'); COMMIT; ELSE DBMS_OUTPUT.PUT_LINE('修改雇员工资失败!'); END IF; END;

运行结果为:

修改雇员工资失败! PL/SQL 过程已成功完成。

步骤2:将雇员编号1234改为7788,重新执行以上程序:

运行结果为:

成功修改雇员工资! PL/SQL 过程已成功完成。

说明:本例中,通过SQL%FOUND属性判断修改是否成功,并给出相应信息。

(2)显示游标:

由开发人员通过程序显式控制,用于从表中取出多行数据,并将多行数据一行一行的单独进行处理.

使用游标的4个步骤:

1.声明游标:

CURSOR 游标名[(参数1 数据类型[,参数2 数据类型…])] IS SELECT语句;

(a).参数是可选部分,所定义的参数可以出现在select语句的where字句中。如果定义了参数,则必须在打开游标时传递相应的实际参数。 (b).select语句可以带where条件,group by,order by等子句,但不能使用into子句。 (c).在SELECT语句中可以使用在定义游标之前定义的变量。

2.打开游标:

OPEN 游标名[(实际参数1[,实际参数2…])];

打开游标时,select语句的查询结果就被送到了游标工作区。

3.提取数据:

fetch 游标名 INTO 变量名1[,变量名2…]; 或 fetch 游标名 into 记录变量;

游标打开后,有一个指针指向数据区,fetch语句一次返回指针所指的一行数据,若要返回多行,可用循环。

4.关闭游标:

close 游标名;

游标一旦关闭,游标占用的资源就被释放,游标变成无效,必须重新打开才能使用。

这里写图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3