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;

    /

  • 相关阅读:
    (转)UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
    (转)使用 Document!X 为自己的dll生成一个漂亮的说明文档
    我的游戏学习日志42——游戏机制设计(2)
    我的游戏学习日志41——游戏机制设计(1)
    我的游戏学习日志40——游戏概念设计(2)
    我的游戏学习日志39——游戏概念设计(1)
    我的游戏学习日志38——游戏性的评估标准(2)
    我的游戏学习日志37——游戏性的评估标准(1)
    我的游戏学习日志36——游戏结构(小结)
    我的游戏学习日志35——游戏结构(4)
  • 原文地址:https://www.cnblogs.com/kawashibara/p/9047469.html
Copyright © 2011-2022 走看看