Oracle CURSOR的简单用法

来源:互联网 发布:java软件下载教程 编辑:程序博客网 时间:2024/05/18 23:15

前言:
 Oracle的对表操作中有一种类似于DataSet的对象操作方法CURSOR,它可以通过建立表的操作对象或者说表的指针对象来达到从表里面提取数据的操作。
说明:
 一般通过SQL语言可以针对某个表的某一行或多行数据进行操作比如说SELECT,UPDATE等。这些操作必须以SQL语句的语法格式来被解释器解释并执行。在实际变成中经常用到,特别是用编程语言来对数据库操作时更是必不可少。当然数据库也不是不能自己来做一些处理的,简单的数据操作的话,像ORACLE这样的数据库可以用自身的PL/SQL语言来实现。不仅执行速度快,而且节省网络。因为它是直接在数据库端执行的。
 CURSOR就是PL/SQL中的一种实现对表的对象化操作方法。
 他一共分为两种:
 显式型
 解释:顾名思义,就是在程序书写过程中利用创建表对象的过程中,明确的使用变量名。
 暗式型
 解释:不是用变量名,而用简单的语法来完成对象的操作。ORACLE里面已经定义好了,只需要调用就可以使用。

关于PL/SQL的书写格式,这里省略。
显式型的CURSOR在定义过程中必须写在定义区间
也就是说需要写在 IS  ..... BEGIN  或者  DECLARE .... BEGIN。
而执行的时候就要写在 BEGIN.....END了。

看不明白的话,就看例子了。

CREATE OR REPLACE PROCEDURE AAA
IS
CURSOR BBB IS
SELECT CCC FROM TABLE ;
vBBB BBB%ROWTYPE;
BEGIN
OPEN BBB;
LOOP
FETCH BBB INTO vBBB;
EXIT WHEN BBB%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(vBBB);
END LOOP;
CLOSE BBB
;
END;
/

 首相创建了一个PROCEDURE名字为AAA,然后在定义区间里面定义了一个CURSOR名字为BBB,
连接表TABLE并从中读取列CCC。之后定义了一个行类型的变量用于存储每一行的数据。
 到此,表的对象以及读取数据的条件还有数据存储用的变量就都定义好了。
 然后OPEN这个表对象,进入循环。每循环一次指针便会自动向后移动,将BBB里面的数据以行为单位读出存入vBBB。然后当BBB的指针到最后也就是说数据读到最后没有了的时候便退出循环并且关闭BBB。
DBMS_OUTPUT.PUT_LINE是用来在屏幕上打印vBBB用的。

 与之相同 OPEN  FETCH CLOSE 的语法格式看来挺麻烦的。这样的话就用FOR来代替也可以

BEGIN
FOR vBBB IN BBB;
LOOP
DBMS_OUTPUT.PUT_LINE(vBBB);
END LOOP;
END;

 这就省事多了。意思也一目了然。因为SURSOR定义了变来名字,用几次也OK。
 暗式型呢?

BEGIN
FOR vBBB IN (SELECT CCC FROM TABLE)
LOOP
DBMS_OUTPUT.PUT_LINE(vBBB)
;
END LOOP;
END;

这样写就行了,但是每次都要重写。脱离了这个循环就没办法使用了。
 因为程序用的都是大写字母,看起来怪怪的。