使用游标技术实现对数据库的增删改查操作

版权声明:原创内容是本人学习总结,仅限学习使用,禁止用于其他用途。如有错误和不足,欢迎评论指正补充。 https://blog.csdn.net/qian_qian_123/article/details/82847127

一、游标概述

1、为什么要使用游标

程序语言是面向记录的,一组变量一次只能存放一个变量或者一条记录,无法直接接收数据库中的查询结果集。为了更好的满足SQL语句向应用程序输出数据的需求,引入了游标的概念,用游标来协调这两种不同的处理方式。

2、游标的基本原理

二、游标分类

①静态游标是在编译时知道其SELECT语句的游标。静态游标又分为两种类型:隐式游标和显示游标。

②很多时候用户需要为游标使用的查询直到运行的时候才能够确定,可以使用REF游标(引用游标)和游标变量满足这个要求。为了使用引用游标,必须声明游标变量。有两种类型的REF游标:强类型REF游标和弱类型REF游标。

1、显式游标的用法

(1)显示游标的使用步骤:

①声明游标

②打开游标

③提取游标

④关闭游标

DECLARE
  CURSOR cursor_studentInfo IS SELECT * FROM Student;--声明游标
  stuInfo Student%ROWTYPE;
BEGIN
  OPEN cursor_studentInfo;--打开游标
  LOOP
    FETCH cursor_studentInfo INTO stuInfo;--提取游标
    EXIT WHEN cursor_studentInfo%NOTFOUND;
    dbms_output.put_line('姓名:'||stuInfo.stuName);
  END LOOP;
  CLOSE cursor_studentInfo;--关闭游标 
END;

(2)显示游标的属性

(3)使用循环游标简化游标的读取

可以使用循环游标简化显示游标的处理代码。循环游标隐式打开游标,自动从活动集获取行,然后在处理完所有行时关闭游标。循环游标自动创建%rowtype类型的变量并将此变量用做记录索引。

DECLARE
  CURSOR cursor_studentInfo IS SELECT * FROM Student;--声明游标
  stuInfo Student%ROWTYPE;
BEGIN
  FOR stuInfo IN cursor_studentInfo
  LOOP
    dbms_output.put_line('姓名:'||stuInfo.stuName);
  END LOOP;
END;

(4)NO_DATA_FOUND和%NOTFOUND的区别

2、隐式游标的用法

3、REF游标的用法

隐式游标和显示游标都是静态定义的,当用户使用它们的时候查询语句语句确定。如果用户需要在运行的时候动态决定执行何种查询,可以使用REF游标和游标变量,步骤如下:

①声明游标。创建游标变量需要两个步骤:声明REF CURSOR类型和声明REF CURSOR类型的游标变量。

②打开游标。打开游标时使用的是OPEN...FOR语句。

语法:OPEN cursor_name FOR select_statement ;

③提取游标。同显示游标。

④关闭游标。同显示游标。

DECLARE
  TYPE ref_cursor IS REF CURSOR;--定义一个REF CURSOR数据类型(弱类型)
  c_ref_cursor_stuInfo ref_cursor;--声明一个该数据类型的游标变量
  stuInfo Student%ROWTYPE;
BEGIN
  OPEN c_ref_cursor_stuInfo FOR SELECT * FROM Student;--打开游标
  LOOP
    FETCH c_ref_cursor_stuInfo INTO stuInfo;--提取游标
    EXIT WHEN c_ref_cursor_stuInfo%NOTFOUND;
    dbms_output.put_line('姓名:'||stuInfo.stuName);
  END LOOP;
  CLOSE c_ref_cursor_stuInfo;--关闭游标
END;

猜你喜欢

转载自blog.csdn.net/qian_qian_123/article/details/82847127