orcale 之 PL/SQL的游标
根据我们之前了解到的情况,SQL是面向集合的,我们的查询结果一般包含多条数据,而在PL/SQL 中的变量一般只能存放一条数据,因此变量是无法满足我们的需求的。这时候我们就需要引入游标来为我们解决问题了。
我们知道在 PL/SQL 中可以使用数据控制语言(DML)对数据进行操作,而在使用这些的时候 Orcale 会在内存中为其分配一个缓存区。而游标就是指向该缓存区的指针。它可以对查询结果集的每一行数据分别进行单独的处理。
游标分为显式游标和隐式游标。显式游标是由用户声明操作的一种游标,而隐式游标是 Orcale 为所有的操作语言自动声明和操作的游标。
显式游标
对于显式游标的操作分为:声明,打开,提取,关闭。

1. 声明游标
在游标的声明中定义了游标的名字而且这个游标和一个 SELECT 关联起来。除此之外显式游标必须在 DEXLARE 中。它的语法如下:
CURSOR <游标名> IS SELECT <语句>
注意:这里的SELECT 语句是可以带有 UNION 或者 MINUS 的语句。
2. 打开游标
语法如下:
OPEN <游标名>;
打开游标就会执行定义的 SELECT语句,执行完毕后,查询出来的结果会放入内存,游标的指针会指向查询结果的头部,
3. 提取游标
打开游标后的工作就是从查询出来的集合进行取值了,取值的语句是 FETCH 语法有两种格式:
FETCH <游标名> INTO <变量列表>;
FETCH <游标名> INTO PL/SQL 记录;
FETCH 每执行一次游标会向后移动一次直到结束位置。
4. 关闭游标
CLOSE <游标名>;
5. 例子
--创建临时表
create table t_emp
( tempne number(4) primary key,
tename varchar2(20)
);
create table t_emp2
( tempne number(4) primary key,
tename varchar2(20)
); DECLARE
emp_no number(4); --定义变量
emp_nanme varchar2(20);
CURSOR emp_cur IS --定义游标
SELECT empno, ename
FROM emp;
BEGIN
OPEN emp_cur; --打开游标
--将第一行的数据放入变量中,之后游标后移
FETCH emp_cur INTO emp_no, emp_nanme;
LOOP
EXIT WHEN NOT emp_cur%FOUND; --如果游标已经到末尾结束
IF emp_no = '7839' THEN
INSERT INTO t_emp values(emp_no,emp_nanme);
else
INSERT INTO t_emp2 values(emp_no,emp_nanme);
END IF;
FETCH emp_cur INTO emp_no, emp_nanme;
END LOOP;
CLOSE emp_cur; --关闭游标
END;
/
隐式游标
上面我们学到了显示游标的使用,接下来我们说下隐式游标。当我们在PL/SQL 中直接使用 SELECT 语句进行操作,则就是隐式的使用了游标,这就是隐式游标。这种游标无需定义,也不需要打开和删除。如下所示
BEGIN
SELECT empno, ename INTO emp_no, emp_nanme FROM emp WHERE empno = 7839;
END
对于隐式游标来说必须要有一个 INTO 子句,因此对于隐式游标来说 SELECT 子句的返回值必须只有一行数据。
orcale 之 PL/SQL的游标的更多相关文章
- PL/SQL使用游标CURSOR
一.使用游标 对于DML语句和单行select into ,oracle自动分配隐形游标.处理select返回多行语句,可以使用显式游标. 使用显示游标处理多行数据,也可使用SELECT..BULK ...
- orcale 之pl/sql例外
orcale 中的例外我们可以看作是其他编程语言中的异常,是为了增强语言的健壮性和容错性. 在orcale中常见的有以下几种: No_data_found 很容易理解就是没有数据返回. Too_man ...
- PL/SQL之--游标
一.游标简介 在PL/SQL中执行SELECT.INSERT.DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),也称为缓冲区.游标是指向该区的一个指 ...
- Oracle PL/SQL,游标,过程
1.PL/SQL 语法相关 -- SQL 语言只是访问,操作数据库的语言,而比并不是程序设计语言,因此不能用于程序开发. -- PL/SQL 是在标准SQl语言上进行过程性扩展后形成的程序设计语言, ...
- PL/SQL之游标的使用
Oracle中的游标有两种: 显式游标 用CURSOR...IS 命令定义的游标,它可以对查询语句(SELECT)返回的多条记录进行处理. 隐式游标 是在执行插入(INSERT).删除(DELETE) ...
- PL/SQL编程—游标
一.游标的相关概念: 定义: 游标它是一个服务器端的存储区,这个区域提供给用户使用,在这个区域里 存储的是用户通过一个查询语句得到的结果集,用户通过控制这个游标区域当中 的指针 来提取游标中的数据,然 ...
- PL/SQL 04 游标 cursor
--游标 declare cursor 游标名字 is 查询语句;begin 其他语句;end; --游标的属性%FOUND%NOTFOUND%ISOPEN%ROWCOUNT(当前游标的指针位 ...
- 在PL/SQL使用游标获取数据及动态SQL
1.游标概念: 当在PL/SQL块中执行DML(增删改)时,Oracle会为其分配上下文区(Context Area),游标是指向上下文区的指针 2. 游标分类: A. 隐式游标 a. 在PL/ ...
- orcale 之PL/SQL 控制语句
控制语句是PL/SQL 的关键所在.只有学好这些控制语句才能在工作中更好的实现各种的功能. 选择结构 1. IF 语句 和其他的编程语言很类似.它的具体机构如下: IF(条件)THEN {语句} EL ...
随机推荐
- 第二周leetcode
4/4 这周莫名得忙,一天是做编译,一天是做模式识别作业,(一天刷魔兽皮肤),周末玩了两天,总的来说还是松懈了,大概只做了两天的leetcode,刷了10道题,羞愧羞愧. 决定每次把代码附上在这个总结 ...
- Oracle电子商务套件版本12.1.3自述文件 (Doc ID 1534411.1)
文档内容 用途 适用范围 详细信息 应用版本更新包 更新后的步骤 包含的修补程序列表 变更记录 文档可访问性 参考 适用于: Oracle Applications DBA - 版 ...
- [LeetCode 题解]: Symmetric Tree
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a ...
- Postgresql 日志审计
配置log_destination = 'csvlog'logging_collector = off log_directory = 'pg_log'log_connections = onlog_ ...
- 命令行web客户端与HTTP REST API调试工具
1.命令行web客户端 curl wget httpie 2.优雅的REST API调试工具 insomnia postman
- 10-08常用的TIME和DATE函数以及各个函数对应的头文件
系统时间和日期函数: #include <time.h> char *asctime(const struct tm *tm);//将tm中存放的信息转换为标准格式 ...
- 清除浏览器缓存meta标签
<meta http-equiv="Cache-Control" content="no-cache" /> <meta http-equiv ...
- c语言------第一次作业,分支,顺序结构
1.1思维导图 1.2本章学习体会及代码量学习体 1.2.1学习体会 初次接触C语言,由于比较懒惰,感觉学习脚步跟不上身边的同学,也比较困扰.但伴随着pta上多次显示的##编译错误##,坚持不懈地问舍 ...
- C博客的第1次作业--分支,顺序结构
1.本章学习总结 1.1 思维导图 1.2本章学习体会,代码量学习体会 1.2.1学习体会 初步了解什么是C语言,明白了这门语言的基本运行功能.了解了关于c语言结构上,语法上的基本知识.下一步要进一步 ...
- mysql--mysql的安装与目录介绍
一.mysql的下载安装 1.下载安装 1.windows10下安装 我们采用绿色免安装版, 打开你的mysql文件夹中的bin目录,我的是这个样子的 将这个路径添加入系统环境变量,首先右键此电脑-- ...