当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle认证综合辅导:Oracle的Cursors概念
发布时间:2012/9/25 10:03:53 来源:城市网学院 编辑:admin
   一。Oracle的Cursors概念:
    游标:用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行结果集,在每条结果集上作操作。
    二。Oracle的Cursors分类:
    1.静态游标:
    分为显式游标和隐式游标。
    2.REF游标:
    是一种引用类型,类似于指针。
    三。Oracle的Cursors详细内容:
    1.显式游标:
    CURSOR游标名(参数) [返回值类型] IS
    Select语句
    生命周期:
    a.打开游标(OPEN)
    解析,绑定……不会从数据库检索数据
    b.从游标中获取记录(FETCH INTO)
    执行查询,返回结果集。通常定义局域变量作为从游标获取数据的缓冲区。
    c.关闭游标(CLOSE)
    完成游标处理,用户不能从游标中获取行。还可以重新打开。
    选项:参数和返回类型
    set serveroutput on
    declare
    cursor emp_cur ( p_deptid in number) is
    select * from employees where department_id = p_deptid;
    l_emp employees%rowtype;
    begin
    dbms_output.put_line(‘Getting employees from department 30’);
    open emp_cur(30);
    loop
    fetch emp_cur into l_emp;
    exit when emp_cur%notfound;
    dbms_output.put_line(‘Employee id '|| l_emp.employee_id || ' is ’);
    dbms_output.put_line(l_emp.first_name || ' ' || l_emp.last_name);
    end loop;
    close emp_cur;
    dbms_output.put_line(‘Getting employees from department 90’);
    open emp_cur(90);
    loop
    fetch emp_cur into l_emp;
    exit when emp_cur%notfound;
    dbms_output.put_line(‘Employee id '|| l_emp.employee_id || ' is ’);
    dbms_output.put_line(l_emp.first_name || ' ' || l_emp.last_name);
    end loop;
    close emp_cur;
    end;
    /
    2.隐式游标:
    不用明确建立游标变量,分两种:
    a.在PL/SQL中使用DML语言,使用ORACLE提供的名为SQL的隐示游标
    b.CURSOR FOR LOOP,用于for loop语句
    a.举例:
    declare
    begin
    update departments set department_name=department_name;
    --where 1=2;
    dbms_output.put_line(‘update '|| sql%rowcount ||' records’);
    end;
    b.举例:
    declare
    begin
    for my_dept_rec in ( select department_name, department_id from departments)
    loop
    dbms_output.put_line(my_dept_rec.department_id || ' : ' || my_dept_rec.department_name);
    end loop;
    end;
    c.举例:
    单独select
    declare
    l_empno emp.EMPLOYEE_ID%type;
    -- l_ename emp.ename%type;
    begin
    select EMPLOYEE_ID
    into l_empno
    from emp;
    --where rownum =1;
    dbms_output.put_line(l_empno);
    end;
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved