Oracle 基础 游标

一:游标的基本原理

  游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。

为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下文区。这个区包含了已经处理完的行数、指向被分析语句的指针,整个区是查询语句返回的数据行集。游标就是指向上下文区句柄或指针。

二:游标的分类

  1.静态游标:在编译时知道其SELECT语句的游标。

    (1).显示游标

    (2).隐式游标

  2.动态游标:用户为游标使用的查询直到运行的时候才能确定,必须声明游标变量。

    (1):强类型REF游标

    (2):弱类型REF游标。

三:显示游标的用法

  显示游标被用于处理返回多行数据的SELECT 语句,游标名通过CURSOR….IS 语句显示地赋给SELECT 语句。

  (一):使用步骤

    1)声明游标:

      CURSOR cursor_name(游标名) IS select 语句;

    2)为查询打开游标:

      OPEN cursor_name(游标名)

    3)取得结果放入PL/SQL变量中;

       FETCH cursor_name(游标名) INTO list_of_variables(变量);

      FETCH cursor_name(游标名) INTO PL/SQL_record(变量列表);

    4)关闭游标。

      CLOSE cursor_name游标名

注意:在声明游标时,select_statement不能包含INTO子句。当使用显示游标时,INTO子句是FETCH语句的一部分。

  例:显示雇员的名称和薪水

    方法一:

--使用LOOP遍历游标
DECLARE
  v_name emp.ename%TYPE;
  v_sal emp.sal%TYPE;
  CURSOR cus_emp IS
    SELECT ename,sal FROM emp;                         --声明游标
BEGIN
   OPEN cus_emp;                                       --打开游标
   LOOP
      FETCH cus_emp INTO v_name,v_sal;                 --提取游标
      EXIT WHEN cus_emp%NOTFOUND;
      dbms_output.put_line(‘第‘||cus_emp%ROWCOUNT||‘个用户:  name:‘||v_name||‘     sal:‘||v_sal);
   END LOOP;
   CLOSE cus_emp;                                      --关闭游标
END;

    显示游标的属性

    %isopen:游标是否打开

    %found:游标是否指向有效行

    %notfounp:游标是否没有指向有效行

    %rowcount:游标抽取的行数

   语法:游标名  属性名

    

      方法二:使用游标简化游标的读取

      For 自定义类型 in 游标名 loop;

        --操作各行的数据

      end loop;

DECLARE
  CURSOR cus_emp IS
    SELECT ename,sal FROM emp;
BEGIN
   FOR record_emp IN cus_emp
   LOOP
      dbms_output.put_line(‘第‘||cus_emp%ROWCOUNT||‘个用户:  name:‘||record_emp.ename||‘     sal:‘||record_emp.sal);
   END LOOP;
END;

四、隐式游标:

  所有的隐式游标都被假设为只返回一条记录。   

  使用隐式游标时,用户无需进行声明、打开及关闭。PL/SQL隐含地打开、处理,然后关掉游标。多条sql语句 隐式游标SQL永远指的是最后一条sql语句的结果,主要使用在update 和 delete语句上。

  隐式游标的四个属性:

属性 说明
SQL%rowcount 影响的记录的行数整数(用来判断插入,更新修改是否成功,必须在comit之前,否则提交后结果为0.)
SQL%found 影响到了记录 true()
SQL%notfound 没有影响到记录 true
SQL%isopen 是否打开 布尔值 永远是false

例如:

DECLARE
  row_emp emp%ROWTYPE;
BEGIN
  SELECT ename,sal INTO row_emp.ename,row_emp.sal
  FROM emp WHERE emp.empno = 7369;
  --判断是否查到数据
  if(SQL%ROWCOUNT=1) THEN
    dbms_output.put_line(‘找到了‘);
  END IF;
  --另一种方式判断
  IF(SQL%Found) THEN
    dbms_output.put_line(‘找到了‘);
  END IF;

  dbms_output.put_line(‘ename:‘||row_emp.ename||‘    sal:‘||row_emp.sal);
END;

五:动态游标

时间: 2024-12-26 19:46:40

Oracle 基础 游标的相关文章

Oracle基础 游标

一.游标 游标用来处理从数据库中检索的多行记录(使用SELECT语句).利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集. 为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下文区.这个区包含了已经处理完的行数.指向被分析语句的指针,整个区是查询语句返回的数据行集.游标就是指向上下文区句柄或指针. 二.游标的分类: 1.静态游标:静态游标是在编译时知道其SELECT语句的游标.静态游标又分为两种类型,隐式游标和显示游标. 2.动态游标:用户为游标使用的查询直到运行的时候才

Oracle的游标介绍

Oracle的游标介绍 Oracle中的PL/SQL的游标是指把数据库中查询出来的数据以临时表的形式存放在内存中,游标可以对存储在内存中的数据进行操作,返回一条或者一组数据,或者一条数据也不返回.PL/SQL中的记录和表类型虽然也能用来存储数据,但对一组存储在内存中的数据进行操作,还是不太方便,游标恰好是这方面的工具. PL/SQL包含隐含游标和显示游标,其中隐含游标用于处理SELECT INTO和DML语句,而显示游标则专门用于处理SELECT语句返回的多行数据,游标的基本操作有: - 声明游

【转载:Oracle基础知识】Oracle数据库体系结构

先来看张直观的图:                                            oracle 11g 体系结构图 理解Oracle体系结构要充分理解三个概念:数据库(database),数据库实例(instance),会话(session),一定不要把这三个概念弄混. 数据库的概念 (A)    物理存储结构由数据文件.控制文件.重做日志文件组成: 1.       数据文件(datafile) select * from dba_data_files; 数据文件包括存

Oracle基础实训

一.Oracle基础SQL练习 班级表:班级编号(主键.标识列).班级名称.班主任.开班日期老师表:老师编号(主键.标识列) .姓名.性别(默认值‘男’).身份证号(必须是18位数字).联系电话学生表:学号(主键.固定五位数字) .班级编号.姓名.性别.出生日期.联系电话.家庭地址成绩表:编号(主键.标识列) .学号.科目名称.分数 1.表格创建 create table();语法 CREATE TABLE [schema.]table (column datatype [DEFAULT exp

Oracle使用游标为所有用户表添加主键语句

应用场合:数据表新增自增一主键能加快数据表的访问速度,而且是整形的索引速度最快.本程序适合在导入Oracle数据库时删除不存在主键的情况下运行. 代码说明:所有的表主键字段名都设置为ID,如果已存在ID字段,则判断是否是整形,如果不是就重命名字段为[表名ID],然后新增ID,如果不存在则直接添加自增一ID的主键 操作说明:打开PQSQL连接数据库后直接执行下面的详细脚本代码运行即可,脚本有风险(会删除原来的索引跟主键约束),请不要轻易在正式运行的数据库上直接执行 --Oracle使用游标为所有用

Oracle使用游标删除所有用户数据表中的所有记录脚本

应用场景:因为数据库中的数据涉及机密信息,希望一次性能删除掉所有数据,只保留数据表结构,供新项目开发程序用 测试结果:经查询已删除所有数据 存在问题:数据表如果存在外键的话下面脚本可能执行不成功,请自行删除或者过滤掉该表,见下图 操作办法:直接将下面的脚本内容复制到PQSQL中执行即可 --Oracle使用游标删除所有用户数据表中的所有记录脚本 declare mystring NVARCHAR2(1000):=''; --定义要输出的字符串变量 cursor mycursor is --定义游

oracle中游标与动态绑定变量

一.      游标: 用数据库语言来描述:游标是映射在结果集中一行数据上的位置实体,有了游标用户就可以访问结果集中的任意一行数据了,将游标放置到某行后,即可对该行数据进行操作,例如提取当前行的数据等等. 在Oracle9i之前,使用FETCH语句每次只能提取一行数据:从Oracle9i开始,通过使用FETCH…BULK COLLECT INTO语句,每次可以提取多行数据.语法如下: (1) FETCH cursor_name INTO variable1,variable2,…: 此方法必须要

Oracle基础知识笔记(10) 约束

大清早打开vs2008,出现这么诡异的错, 删了一个dll的就好了.如图 Oracle基础知识笔记(10) 约束

Oracle基础 shutdown和startup

原文:Oracle基础 shutdown和startup 一.shutdown命令:SHUTDOWN有四个参数:NORMAL.TRANSACTIONAL.IMMEDIATE.ABORT.缺省不带任何参数时表示是NORMAL. SHUTDOWN NORMAL:不允许新的连接.等待会话结束.等待事务结束.做一个检查点并关闭数据文件.启动时不需要实例恢复. SHUTDOWN TRANSACTIONAL:不允许新的连接.不等待会话结束.等待事务结束.做一个检查点并关闭数据文件.启动时不需要实例恢复. S