oracle cursor 入门


前言:
 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;
 这届这样写就行了,但是每次都要从写。脱离了这个循环就没办法使用了。
 
 例:
 create or replace function GETString(device in varchar2) return varchar2 is
  wadmin varchar2(250);
begin
  declare
cursor userRows is select u.czymc from RMAINT_PERSON p,RMINFO u where p.id = u.czyh and DEVICEID = device;
temp varchar2(250);
begin
open userRows;
-- 循环开始
loop
  fetch userRows into temp;
  exit when userRows%notfound; -- 跳出条件
  wadmin := wadmin||','||temp;
end loop;
-- 循环结束
close userRows;
end;
  return(wadmin);
end GETString;

你可能感兴趣的:(oracle)