PLSQL入门与精通(第7章:游标)

本章描述游标用法。在SELECT语句中,可以用游标的方式获得多行数据的每一行。

到目前为止都是“SELECT INTO文”。如果只返回一行结果的话用SELECT INTO没问题,
如果返回多行结果SELECT INTO语句就会出错,所以SELECT INTO只在主KEY访问的情况下使用。
但是,在以主KEY以外为条件的查询中,一般会出现多行数据,这种情况下,就需要用到游标。

例子:
这次,指定主键以外的条件:指定部门编号,在画面上显示该部门所属员工的详细情况。

请创建以下脚本文件,在SQL*Plus中执行。假设文件名test.sql。

▼▼▼从这里开始test.sql文件的内容行编号是为了便于说明。▼▼

1 set serveroutput on
2 set verify off
3 DECLARE
4/光标的声明/
5 CURSOR CUR_EMP IS
6 SELECT EMPNO, ENAME FROM EMP
7 WERE DEPTNO=&部门编号;
8 /记录类型变量的声明/
9 REC CUR_EMP%ROWTYPE;
10 BEGIN
11/打开光标/
12 OPEN CUR_EMP;
13 /1行取得的同时画面显示/
14 LOOP
15 FETCH CUR_EMP INTO REC;
16 EXIT WHEN CUR_EMP%NOTFOUND;
17 DBMS_OUTPUT.PUT_LINE(REC.EMPNO || ’ ’ || REC.ENAME);
18 END LOOP;
19/关闭光标/
20 CLOSE CUR_EMP;
21 END;
22 /
23 set verify on

▲▲▲▲减到这种程度

执行此文件如下所示。

▼▼▼从这里▼

SQL> @test.sql

请在部门编号中输入值:20

7369 SMITH

7566 JONES

7788 SCOTT

7876 ADAMS

7902 FORD

PL/SQL过程成功完成。

▲▲▲▲减到这种程度

在这里,在部门号码里指定20,表示了那个部门的职员的详细情况。

这次只解说要点,详细情况将在下次以后进行说明。

首先,为了处理返回多行的SELECT语句,在宣言部中以该SELECT语句为基础声明光标。(5-7行)也声明具有与该SELECT语句的一行相同结构的记录类型变量。(第9行)

然后在执行部打开光标。将光标移到第12行。然后将光标移到第1行。(第15行)显示该变量的画面。(第17行)在循环处理中重复行的处理。(第14行~第18行)从光标处可处理1行、1行。当您试图在最后一行中获取更多行时,将退出循环。(第16行)最后关闭光标。(第20行)

怎么样?各项目的详细情况下一次会进行说明,我想可以边看这个边写十分实用的程序。

最后是附加说明。这些都与直接PL/SQL的语法无关,但都是SQLPlus和SQLDeveloper的功能。脚本文件的PL/SQL块以外的部分。

第1行set serveroutput

使DBMS OUTPUT的画面输出有效(在SQLPlus、SQLDeveloper等中有效)

第二行set verify off

抑制第7行的替换变量(&部门编号)的字符串替换前后的信息

第7行&部门编号

在发送到服务器之前,将其替换为其他字符串(此功能称为替换变量)

第22行/(斜线)PL/SQL块部分(第3-21行)汇总后发送给服务器

这次就到这里。请期待下次。

猜你喜欢

转载自blog.csdn.net/niusr_1980_01/article/details/113949236