• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Oracle 游标使用总结
    Oracle游标分为显示游标和隐式游标。
    显示游标(Explicit Cursor):在PL/SQL程序中定义的、用于查询的游标称作显示游标。
    隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的、而且是在PL/SQL中使用UPDATE/DELETE语句时,Oracle系统自动分配的游标。
    一.显示游标
    1.使用步骤
    (1)定义 (2)打开 (3)使用 (4)关闭
    2.使用演示
    首先创建测试用表STUDENT,脚本如下:
    复制代码 代码如下:

    CREATE TABLE "STUDENT" (
    "STUNAME" VARCHAR2(10 BYTE),
    "STUNO" VARCHAR2(4 BYTE),
    "AGE" NUMBER,
    "GENDER" VARCHAR2(2 CHAR)
    )

    (1).使用WHILE循环处理游标
    create or replace PROCEDURE PROC_STU1 AS
    BEGIN
    --显示游标使用,使用while循环
    declare
    --1.定义游标,名称为cur_stu
    cursor cur_stu is
    select stuno,stuname from student order by stuno;
    --定义变量,存放游标取出的数据
    v_stuno varchar(4);
    v_stuname varchar(20);
    begin
    --2.打开游标cur_stu
    open cur_stu;
    --3.将游标的当前行取出存放到变量中
    fetch cur_stu into v_stuno,v_stuname;
    while cur_stu%found --游标所指还有数据行,则继续循环
    loop
    --打印结果
    dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
    --继续将游标所指的当前行取出放到变量中
    fetch cur_stu into v_stuno,v_stuname;
    end loop;
    close cur_stu; --4.关闭游标
    end;
    END PROC_STU1;
    (2).使用IF..ELSE代替WHILE循环处理游标
    create or replace PROCEDURE PROC_STU2 AS
    BEGIN
    --显示游标使用,使用if判断
    declare
    --1.定义游标,名称为cur_stu
    cursor cur_stu is
    select stuno,stuname from student order by stuno;
    --定义变量,存放游标取出的数据
    v_stuno varchar(4);
    v_stuname varchar(20);
    begin
    --2.打开游标cur_stu
    open cur_stu;
    --3.将游标的当前行取出存放到变量中
    fetch cur_stu into v_stuno,v_stuname;
    loop
    if cur_stu%found then --如果游标cur_stu所指还有数据行
    --打印结果
    dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
    --继续将游标所指的当前行取出放到变量中
    fetch cur_stu into v_stuno,v_stuname;
    else
    exit;
    end if;
    end loop;
    close cur_stu; --4.关闭游标
    end;
    END PROC_STU2;
    (3).使用FOR循环处理游标
    create or replace PROCEDURE PROC_STU3 AS
    BEGIN
    --显示游标使用,使用for循环
    declare
    --定义游标,名称为cur_stu
    cursor cur_stu is
    select stuno,stuname from student order by stuno;
    begin
    for stu in cur_stu
    loop
    dbms_output.PUT_LINE(stu.stuno||'->'||stu.stuname);
    --循环做隐含检查 %notfound
    end loop;
    --自动关闭游标
    end;
    END PROC_STU3;
    (4).常用的使用EXIT WHEN处理游标
    create or replace
    PROCEDURE PROC_STU1_1 AS
    BEGIN
    --显示游标使用,使用exit when循环
    declare
    --1.定义游标,名称为cur_stu
    cursor cur_stu is
    select stuno,stuname from student order by stuno;
    --定义变量,存放游标取出的数据
    v_stuno varchar(4);
    v_stuname varchar(20);
    begin
    --2.打开游标cur_stu
    open cur_stu;
    loop
    --3.将游标的当前行取出存放到变量中
    fetch cur_stu into v_stuno,v_stuname;
    exit when cur_stu%notfound; --游标所指还有数据行,则继续循环
    --打印结果
    dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
    end loop;
    close cur_stu; --4.关闭游标
    end;
    END PROC_STU1_1;
    二.隐式游标
    1.使用演示
    create or replace PROCEDURE PROC_STU4 AS
    BEGIN
    --隐式游标使用
    update student set stuname='张燕广' where stuno='1104';
    --如果更新没有匹配则插入一条新记录
    if SQL%NOTFOUND then
    insert into student(STUNO,STUNAME,AGE,GENDER)
    values('1104','张燕广',18,'男');
    end if;
    END PROC_STU4;
    2.说明
    所有的SQL语句在上下文区内部都是可执行的,因为都有一个游标指向上下文区,此游标就是
    SQL游标,与现实游标不同的是,SQL游标在PL/SQL中不需要打开和关闭,而是在执行UPDATE、
    DELETE是自动打开和关闭。
    上面例子中就是通过SQL%NOTFOUND游标属性判断UPDATE语句的执行结果决定是否需要插入新记录。
    您可能感兴趣的文章:
    • 详解Oracle游标的简易用法
    • Oracle游标的使用实例详解
    • Oracle中游标Cursor基本用法详解
    • 详解Oracle隐式游标和显式游标
    • Oracle中的游标和函数详解
    • Oracle出现超出打开游标最大数的解决方法
    • Oracle显示游标的使用及游标for循环
    • Oracle存储过程返回游标实例详解
    • oracle 在一个存储过程中调用另一个返回游标的存储过程
    • Oracle游标使用参考语句实例解析
    上一篇:ORACLE实例的后台进程
    下一篇:oracle 优化的一点体会
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Oracle 游标使用总结 Oracle,游标,使用,总结,Oracle,