zoukankan      html  css  js  c++  java
  • PL/SQL游标

    PL/SQL游标:
    A:分类:
    1:隐式游标:非用户明确声明而产生的游标. 你根本看不到cursor这个关键字.
    2:显示游标:用户明确通过cursor关键字来声明的游标.

    B:什么是隐式游标:
    1:什么时候产生:
    会在执行任何合法的SQL语句(DML---INSERT UPDATE DELETE DQL-----SELECT)中产生.他不一定存放数据.也有可能存放记录集所影响的行数.
    如果执行SELECT语句,这个时候游标会存放数据.如果执行INSERT UPDATE DELETE会存放记录影响的行数.
    C:隐式游标叫什么名字:
    名字叫sql
    关于sql的游标变量到底有哪些呢?
    作用:返回最近一次执行SQL语句所涉及的游标相关信息.因为每执行一次SQL语句,都会产生一个隐式游标.那么当前执行的SQL语句就是当前的隐式游标.
    sql%found
    sql%notfound
    sql%rowcount
    sql%isopen
    D:关于隐式游标的例子:

    create table 学生基本信息表
    (
    StuID int,
    StuName varchar2(20)
    )

    alter table 学生基本信息表 add constraint PK_STUID primary key(StuID)

    declare
    num int:=0;
    begin
    num:=#
    delete from 学生基本信息表 where StuID=num;
    if sql%notfound then
    dbms_output.put_line('该行数据没有发现');
    else
    dbms_output.put_line('数据被发现并删除,影响的行数为:'||sql%rowcount);
    end if;
    end;

    E:关于显示游标的例子:
    1:如何定义显示游标
    declare cursor <cursor_name> is [select语句];
    declare cursor mycur is select empno,ename,job from scott.emp;
    2:如何打开游标:
    open <cursor_name>;
    open mycur;
    3:如何通过游标来读取数据
    fetch <cursor_name> into <variable_list>
    4:如何关闭游标:
    close <cursor_name>;
    close mycur;
    注意:在Oracle中,不需要显示销毁游标.因为在Oracle中,很多东西是由JAVA写的.Oracle会自动销毁游标.
    5:举例:

    declare
    cursor mycur is select empno,ename,job from emp;
    vempno emp.empno%type;
    vename emp.ename%type;
    vjob emp.job%type;
    begin
    open mycur;
    fetch mycur into vempno,vename,vjob;
    dbms_output.put_line('I Found You!'||mycur%rowcount||'行');
    dbms_output.put_line('读取的数据为'||vempno||' '||vename||' '||vjob);
    close mycur;
    end;


    因为只读出来一条,所以要遍历一下:
    declare
    cursor mycur is select empno,ename,job from emp;
    vempno emp.empno%type;
    vename emp.ename%type;
    vjob emp.job%type;
    begin
    open mycur;
    loop
    fetch mycur into vempno,vename,vjob;
    exit when mycur%notfound;
    if mycur%found then
    dbms_output.put_line('读取的数据为'||vempno||' '||vename||' '||vjob);
    end if;
    end loop;
    dbms_output.put_line('I Found You!'||mycur%rowcount||'行');
    close mycur;
    end;
    6:通常情况下我们在读取表数据的时候,我们需要动态的去查询.所以能不能在Oracle中给游标带参数呢?可以!
    1):如何定义带参数的游标:
    declare cursor <cursor_name>(参数名称 参数类型描述) is select xxxxx from bbbbb where aaa==??? and ccc=???;
    2):例子:
    游标是一个集合,读取数据有两种方式
    第一种方式: open fetch close
    第二种方式: for 一但使用了for循环 在循环刚刚开始的时候,相当于执行open,在处理循环的时候,相当于执行fetch,
    在退出循环的时候,相当于执行了close
    declare
    cursor query(vname varchar) is select empno,ename,job from emp where ename like'%'||vname||'%';

    begin
    for line in query('A')
    loop
    dbms_output.put_line(line.empno||' '||line.ename||' '||line.job);
    end loop;
    end;

    实现动态输入:
    declare
    cursor query(vname varchar) is select empno,ename,job from emp where ename like'%'||vname||'%';

    name1 varchar(10);
    begin
    name1:=upper('&name1');
    for line in query(name1)
    loop
    dbms_output.put_line(line.empno||' '||line.ename||' '||line.job);
    end loop;
    end;

  • 相关阅读:
    一键搞定JavaEE应用,JRE+Tomcat+Mysql-JaveEE绿色运行环境JTM0.9版 (转载)
    java Timer 定时每天凌晨1点执行任务
    阿里云windows 2012服务器部署java web程序教程
    记录web项目部署到阿里云服务器步骤
    Javaweb程序打包或exe执行文件
    mysql常见的错误码
    java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的形式和其他常见Excel中数据转换问题
    jsp实现文件下载的代码(转载)
    Java导出Excel表,POI 实现合并单元格以及列自适应宽度(转载)
    Tishreen-CPC 2018 G. Colors Overflow(分块)
  • 原文地址:https://www.cnblogs.com/shaohz2014/p/3713782.html
Copyright © 2011-2022 走看看