解析数据库中游标的使用方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
此时,该记录变量的构造与游标的构造完全相同.(留意,此处 最好不要用表名).
4 关闭游标: CLOSE CUR_NAME; 例 查询 7788 的员工姓名,职务,工资.
DECLARE
V_ENAME EMP.ENAME%TYPE;
V_JOB
EMP.JOB%TYPE;
-----------------------
--1.
CURSOR CUR_EMP IS SELECT ENAME,JOB FROM EMP WHERE
EMPNO = 7788;
BEGIN
--2.
OPEN CUR_EMP;
--3.
FETCH CUR_EMP INTO V_ENAME,V_JOB;
DBMS_OUTPUT.PUT_LINE(V_ENAME||' '||V_JOB);
解析数据库中游标的使用方法
游标是系统为用户开设的一个数据缓冲区,存放 SQL 语句 的执行结果。由系统或用户以变量的形式定义。用户可以用 SQL 语句逐一从游标中获得记录,并赋给主变量,交由主语言进一步 处理,主语言是面对记录的,一组主变量一次只能存放一条记录 在某些状况下,须要把数据从存放在磁盘的表中调到计算机内存 中进展处理,最终将处理结果显示出来或最终写回数据库。这样 数据处理的速度才会提高,否那么常见的磁盘数据交换会降低效 率。用数据库语言来描述游标就是映射在结果集中一行数据上的 位置实体,有了游标,用户就可以访问结果集中的随意一行数据 了,将游标放置到某行后,即可对该行数据进展操作,例如提取 当前行的数据等。
第5页 共8页
例:
DELCARE CURSOR C_EMP IS SELECT empno,ename,salary FROM emp WHERE salary>1500 ORDER BY ename; ........ BEGIN
在游标定义中 SELECT 语句中不必须非要表可以是视图,也可 以从多个表或视图中选择. 2.翻开游标
第8页 共8页
件. 2 翻开游标: OPEN CUR_NAME P1,P2,... A. 假如有参数,那么首先见实际参数传递给 SELECT 语句 B. 执行 SELECT 语句.其结果将存在游标中,并且可以用游标
名来进展限制. 3 获得数据: FETCH CUR_NAME INTO 变量; A. FETCH 从第一行数据起先,每 FETCH 一行数据,自动跳到下
--4.
CLOSE CUR_EMP; END;
当系统运用一个隐式游标时,可以通过隐式游标的属性来了 解操作的状态和结果,进而限制程序的流程。隐式游标可以运用 名字 SQL 来访问,但要留意,通过 SQL 游标名总是只能访问前一 个处理操作或单行 SELECT 操作的游标属性。所以通常在刚刚执行 完操作之后,马上运用 SQL 游标名来访问属性。游标的属性有四 种 , 分 别 是 SQL %ISOPEN , SQL %FOUND , SQL %NOTFOUND ,
运用游标中的值之前应当首先翻开游标,翻开游标初始化查 询处理。翻开游标的语法
OPEN 游标名 实际参数 1,...; 翻开游标时,SELECT 语句的查询结果就被传送到了游标工作 区。 例: OPEN C_EMP; 3.提取数据 从游标得到一行数据运用 FETCH 吩咐。每一次提取数据后, 游标都指向结果集的下一 FETCH cursor_name INTO variable,..
第7页 共8页
CLOSE 游标名; 例: CLOSE C_EMP; 显式游标翻开后,必需显式地关闭。游标一旦关闭,游标占 用的资源就被释放,游标变成无效,必需重新翻开才能运用。 Oracle 支持动态 SELECT 语句和动态游标,动态的方法大大 扩展了程序设计的实力。 对于查询结果为一行的 SELECT 语句,可以用动态生成查询语 句字符串的方法,在程序执行阶段临时地生成并执行,语法是: execute immediate 查询语句字符串 into 变量; 在变量声明局部定义的游标是静态的,不能在程序运行过程 中修改。虽然可以通过参数传递来取得不同的数据,但还是有很 大的局限性。通过采纳动态游标,可以在程序运行阶段随时生成 一个查询语句作为游标。要运用动态游标须要先定义一个游标类 型,然后声明态地说明。
第6页 共8页
对于 SELECT 定义的游标的每一列,FETCH 变量列表都应当有 一个变量与之相对应,变
在可执行局部,按以下格式将游标工作区中的数据取到变量 中。提取操作必需在翻开游标之后进展。
FETCH 游标名 INTO 变量名; 或 FETCH 游标名 INTO 记录变量; 游标翻开后有一个指针指向数据区,FETCH 语句一次返回指 针所指的一行数据,要返回多行需重复执行,可以运用循环语句 来实现。限制循环可以通过判定游标的属性来进展。 下面对这两种格式进展说明: 第一种格式中的变量名是用来从游标中接收数据的变量,须 要事先定义。变量的个数和类型应与 SELECT 语句中的字段变量的 个数和类型相同。 其次种格式一次将一行数据取到记录变量中,须要运 用%ROWTYPE 事先定义记录变量,这种形式运用起来比拟便利,不 必分别定义和运用多个变量。 定义记录变量的方法如下: 变量名 表名|游标名%ROWTYPE; 其中的表必需存在,游标名也必需先定义。 4.关闭游标
显式游标的运用总共分 4 个步骤: 1.声明游标 在 DECLEAR 局部按以下格式声明游标: CURSOR 游标名 参数 1 数据类型... IS SELECT 语句; 参数是可选局部,所定义的参数可以出此时此刻 SELECT 语句 的 WHERE 子句中。假如定义了参数,那么必需在翻开游标时传递 相应的实际参数。 SELECT 语句是对表或视图的查询语句,甚至也可以是联合查 询。可以带 WHERE 条件、ORDER BY 或 GROUP BY 等子句,但不能 运用 INTO 子句。在 SELECT 语句中可以运用在定义游标之前定义 的变量。
第3页 共8页
SQL %ROWCOUNT。 SQL%ISOPEN 返回的类型为布尔型,判定游标是否被翻开,假
如翻开%ISOPEN 等于 true,否那么等于 false,即执行过程中为真, 完毕后为假.
SQL%NOTFOUND 返回值为布尔型,判定游标所在的行是否有效, 假如有效,那么%FOUNDD 等于 true,否那么等于 false,即与%FOUND 属性返回值相反.
游标 for 循环示显示游标的一种快捷运用方式,它运用 for 循环依次读取结果集中的行数据,当 form 循环起先时,游标自动 翻开(不须要 open),每循环一次系统自动读取游标当前行的数据 (不须要 fetch),当退出 for 循环时,游标被自动关闭(不须要运 用 close)。运用游标 for 循环的时候不能运用 open 语句,fetch 语句和 close 语句,否那么会产生错误。
游标有两种类型:显式游标和隐式游标。在程序中用到的 SELECT...INTO...查询语句,一次只能从数据库中提取一行数据, 对于这种形式的查询和触发器操作,系统都会运用一个隐式游标。 但是假如要提取多行数据,就要由程序员定义一个显式游标,并 通过与游标有关的语句进展处理。显式游标对应一个返回结果为 多行多列的 SELECT 语句。
一行.直到 FETCH 了最终一行数据为止. B. 假如运用平凡变量来获得数据,那么,应当依据游标构造
中的字段来定义变量. 此时,变量列表与游标中的字段列表在类型,依次,个数上相
同.
第2页 共8页
C. 也 可 以 运 用 记 录 变 量 来 获 得 数 据 . 记 录 变 量 游 标 名%ROWTYPE;
SQL%FOUND 返回值的类型为布尔型,值为 TRUE 代表插入 删除 更新或单行查询操作胜利.
SQL%ROWCOUNT 返回值类型为整型,返回当前位置为止游标读 取的记录行数,即胜利执行的数据行数。
记录并不保存在数据库中,它与变量一样,保存在内存空间 中,在运用记录时候,要首先定义记录构造,然后声明记录变量。 可以把 PL/SQL 记录看作是一个用户自定义的数据类型。
set serveroutput on; declare
第4页 共8页
cursor mycur(vartype number)is select emp_no,emp_zc from cus_emp_basic where com_no=vartype; begin for person in mycur(000627) loop dbms_output.put_line(' 编 号 :'||person.emp_no||', 住 址:'||person.emp_zc); end loop; end;
游标一旦翻开,数据就从数据库中传送到游标变量中,然后 应用程序再从游标变量中分解出须要的数据,并进展处理。以下
第1页 共8页
将通过具体的例子为您介绍显式游标和隐式游标。 显式游标: 1 定义游标 CURSOR CUR_NAME P1,P2,... IS SELECT 语句 -------------------A. 该 SELECT 语句不行以是 SELECT..INTO..语句. B. 游标可以有参数,这些参数用来参加 SELECT 中的 WHERE 条
相关文档
最新文档