zoukankan      html  css  js  c++  java
  • PLSQL游标

    静态游标:结果集已经确实(静态定义)的游标。分为隐式和显式游标

    隐式游标:所有DML语句为隐式游标,通过隐式游标属性可以获取SQL语句信息;

    显式游标:用户显式声明的游标,即指定结果集。当查询返回结果超过一行时,就需要一个显式游标;

    REF游标:动态关联结果集的临时对象

    静态游标Cursor:隐式游标/显示游标

    游标是内存中的一个区域,在DML语句运行时打开,完成后关闭

    判断隐式游标的属性

    隐式游标

    执行DML操作,返回游标情况

    declare

    begin

    update scott.emp set emp.sal=emp.sal*1.3 where emp.job='SALESMAN';

    if sql%found then

    dbms_output.put_Line(sql%rowcount||' rows has been updated');

    elsif sql%notfound then

    dbms_output.put_line('0 updated');

    end if;

    end;

    /

    4 rows has been updated

    PL/SQL procedure successfully completed.

    declare

    begin

    update scott.emp set emp.sal=emp.sal*1.3 where emp.job='SALESMAN';

    if sql%found then

    dbms_output.put_line(sql%rowcount||' rows has been updated');

    elsif sql%notfound then

    dbms_output.put_line(sql%rowcount||' rows has been updated');

    end if;

    end;

    /

    wps2EDD.tmp

    定义显式游标

    declare

    cursor cur_emp is select * from emp;

    v_empRow emp%ROWTYPE;

    begin

    if cur_emp%isopen then --游标已经打开

    null;

    Else --游标未打开

    open cur_emp;--打开游标

    end if;

    fetch cur_emp into v_empRow;--取出游标当前行数据

    while cur_emp%FOUND loop--判断是否有数据

    dbms_output.put_line(cur_emp%ROWCOUNT||'/EMPNO '||v_empROw.ename||',position: '||v_empRow.job||',salary: '||v_empRow.sal);

    fetch cur_emp into v_empRow;--把游标指向下一行

    end loop;

    close cur_emp;--关闭游标

    end;

    /

    1/EMPNO SMITH,position: CLERK,salary: 800

    2/EMPNO ALLEN,position: SALESMAN,salary: 1600

    3/EMPNO WARD,position: SALESMAN,salary: 1250

    4/EMPNO JONES,position: MANAGER,salary: 2975

    5/EMPNO MARTIN,position: SALESMAN,salary: 1250

    6/EMPNO BLAKE,position: MANAGER,salary: 2850

    7/EMPNO CLARK,position: MANAGER,salary: 2450

    8/EMPNO SCOTT,position: ANALYST,salary: 3000

    9/EMPNO KING,position: PRESIDENT,salary: 5000

    10/EMPNO TURNER,position: SALESMAN,salary: 1500

    11/EMPNO ADAMS,position: CLERK,salary: 1100

    12/EMPNO JAMES,position: CLERK,salary: 950

    13/EMPNO FORD,position: ANALYST,salary: 3000

    14/EMPNO MILLER,position: CLERK,salary: 1300

    定义显示游标流程

    定义游标(cur_emp)

    If cur_emp%isopen then null

    Else open cur_emp

    取得一行记录(fetch cur_emp into v_empRow)

    如果Cur_emp%found 则执行LOOP循环:

    输出当前行记录

    取得下一行记录(fetch cur_emp into v_empRow)

    回到LOOP循环

    关闭游标

    使用LOOP循环输出游标

    eclare

    cursor cur_emp is select * from emp;

    v_empRow emp%ROWTYPE;

    begin

    if cur_emp%isopen then --游标打开

    null;

    Else --游标未打开

    open cur_emp;--打开游标

    end if;

    loop

    fetch cur_emp into v_empRow;取出游标当前行数据

    exit when cur_emp%notfound;--如果没有找到数据则退出循环

    dbms_output.put_line(cur_emp%ROWCOUNT||'/EMPNO '||v_empROw.ename||',position: '||v_empRow.job||',salary: '||v_empRow.sal);

    end loop;

    close cur_emp;--关闭游标

    end;

    /

    定义显示游标流程

    定义游标(cur_emp)

    If cur_emp%isopen then null

    Else open cur_emp

    LOOP循环:

    取出游标当前行数据(fetch cur_emp into v_empRow)

    exit when cur_emp%notfound;--如果没有找到数据则退出循环

    输出

    回到LOOP循环

    关闭游标

    使用FOR循环操作游标

    declare

    cursor cur_emp is select * from emp;

    begin

    for v_empRow in cur_emp loop

    dbms_output.put_line(cur_emp%ROWCOUNT||'/ename:'||v_empRow.ename||',position: '||v_empRow.job||',salary: '||v_empRow.sal);

    end loop;

    end;

    /

    尽量使用FOR循环操作

    在编写游标操作中,使用FOR循环操作游标不仅代码简单,而且可以将游标的状态交给系统去完成

    定义游标(cur_emp)

    FOR循环判断数据是否在游标内(FOR v_empRow in cur_emp loop)

    输出

    循环结束

    定义参数游标

    declare

    cursor cur_emp(dno emp.deptno%type) is select * from emp where deptno=dno;

    begin

    for v_empRow in cur_emp(&deptno) loop

    dbms_output.put_line(cur_emp%ROWCOUNT||'/ename:'||v_empRow.ename||',position: '||v_empRow.job||',salar0y: '||v_empRow.sal);

    end loop;

    end;

    /

  • 相关阅读:
    开发DBA(APPLICATION DBA)的重要性
    SQL有外连接的时候注意过滤条件位置
    程序与bug
    Dalvik虚拟机进程和线程的创建过程分析
    Dalvik虚拟机简要介绍和学习计划
    Dalvik虚拟机的运行过程分析
    JRE和JDK的概念
    myeclipse6.0.1(内置了eclipse)安装及其配置
    JDK 环境变量如何设置
    jdk1.5和tomcat5.5免安装的环境配置
  • 原文地址:https://www.cnblogs.com/kawashibara/p/9047469.html
Copyright © 2011-2022 走看看