ORACLEPL/SQL基础2(游标的学习)

发表于:2007-05-25来源:作者:点击数: 标签:
游标学习 一 游标是什么: 游标字面理解就是游动的光标。 用 数据库 语言来描述:游标是映射在结果集中一行数据上的位置实体,有了游标 用户就可以访问结果集中的任意一行数据了,将游标放置到某行后,即可对该行数据进行操作,例如提取当前 行的数据等等。

游标学习

一> 游标是什么:
  游标字面理解就是游动的光标。
  用数据库语言来描述:游标是映射在结果集中一行数据上的位置实体,有了游标
  用户就可以访问结果集中的任意一行数据了,将游标放置到某行后,即可对该行数据进行操作,例如提取当前
  行的数据等等。
二> 游标的分类:
   显式游标和隐式游标

   显示游标的使用需要4步:
      1.声明游标
              
                CURSOR mycur(vartype number) is
                 select emp_no,emp_zc from cus_emp_basic
                where com_no = vartype;

      2.打开游标
               open mycur(000627)         注:000627:参数
          
      3.读取数据
                 fetch mycur into varno,varprice;
              
      4.关闭游标
                 close mycur;
三> 游标的属性
       oracle 游标有4个属性: %ISOPEN , %FOUND , %NOTFOUND, %ROWCOUNT
      
       %ISOPEN 判断游标是否被打开,如果打开%ISOPEN 等于true,否则等于false
       %FOUND  %NOTFOUND 判断游标所在的行是否有效,如果有效,则%FOUNDD等于true,否则等于false
       %ROWCOUNT 返回当前位置为止游标读取的记录行数。

四> 示例:
 
  
set serveroutput on;
declare
      varno varchar2(20);
      varprice varchar2(20);
     
     CURSOR mycur(vartype number) is
       select emp_no,emp_zc from cus_emp_basic
       where com_no = vartype;
     begin
    
       if mycur%isopen = false then
       
         open mycur(000627);
       end if;
         fetch mycur into varno,varprice;
         while mycur%found
         loop
        dbms_output.put_line(varno||','||varprice);
        if mycur%rowcount=2 then
        exit;
        end if;
        fetch mycur into varno,varprice;
     
        end loop;
        close mycur;
        
         end;

 

 

  pl/sql 记录 的结构和c语言中的结构体类似,是由一组数据项构成的逻辑单元。
  pl/sql 记录并不保存再数据库中,它与变量一样,保存再内存空间中,在使用记录时候,要首先定义记录结构
  ,然后声明记录变量。可以把pl/sql记录看作是一个用户自定义的数据类型。

  set serveroutput on;
       declare
    
      type person is record
         (
            empno  cus_emp_basic.emp_no%type,
            empzc  cus_emp_basic.emp_zc%type);
     
      person1 person;
     
      cursor mycur(vartype number)is
      select emp_no,emp_zc from cus_emp_basic
           where com_no=vartype;
          
      begin
           if mycur%isopen = false then
           open mycur(000627);
           end if;
          
           loop
             fetch mycur into person1;
             exit when mycur%notfound;
             dbms_output.put_line('雇员编号:'||person1.empno||',地址:'||person1.empzc);
          end loop;
          close mycur;
          end;

 


   典型游标for 循环
   
    游标for循环示显示游标的一种快捷使用方式,它使用for循环依次读取结果集中的行
    数据,当form循环开始时,游标自动打开(不需要open),每循环一次系统自动读取
    游标当前行的数据(不需要fetch),当退出for循环时,游标被自动关闭(不需要使用close)

   使用游标for循环的时候不能使用open语句,fetch语句和close语句,否则会产生错误。

 


         set serveroutput on;
        declare
    
    
        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;


原文转自:http://www.ltesting.net