PL/SQL学习笔记之游标
一:游标
Oracle会创建一个上下文区域,用于处理SQL语句,其中包含需要处理的语句、处理结果等等。
游标指向这一上下文的区域。
PL/SQL通过控制游标在上下文区域移动,来获取SQL语句的结果信息。
有两种类型的游标:
隐式游标
显式游标
二:隐式游标
对于DML操作(INSERT、UPDATE、DELETE)语句,Oracle会自动创建隐式游标指向该语句的上下文区域。
对于隐式游标,我们无法通过游标名来显式操作它,但是可以通过一些通用的属性来获取到最近的隐式游标指向的上下文区域中的信息,主要有:
%FOUND 如果一个INSERT,UPDATE或DELETE语句影响了一行或多行或SELECT INTO语句返回一行或多行,返回TRUE;否则,它将返回FALSE。
%NOTFOUND 与%FOUND相反。如果一个INSERT,UPDATE或DELETE语句影响没有行或SELECT INTO语句返回任何行,返回TRUE。否则,它将返回FALSE。
%ISOPEN 隐式游标总是返回FALSE,因为Oracle执行其相关的SQL语句之后自动关闭SQL游标。
%ROWCOUNT 返回受INSERT,UPDATE,或DELETE语句,或SELECT INTO语句影响的行数。
属性访问格式:sql%属性名
例如:
DECLARE
total_rows number(2);
BEGIN
UPDATE customers
SET salary = salary + 500;
IF sql%notfound THEN //获取执行结果
dbms_output.put_line('no customers selected');
ELSIF sql%found THEN
total_rows := sql%rowcount;
dbms_output.put_line( total_rows || ' customers selected ');
END IF;
END;
三:显式游标
显式游标 在DECLARE部分被定义,一般用于指向SELECT语句的执行结果。
1)创建游标
CURSOR cursor_name IS select_statement;
2)打开游标
打开游标分配内存,使得其接收所获取的sql语句的执行结果。
OPEN cursor_name;
3)获取当前游标所指向的行
获取一次,读取一行,并且读取完后自动移动到下一行。
FETCH cursor_name INTO 变量1, 变量2, 变量3...; //用变量依次获取当前行的各个字段值
4)关闭游标
关闭游标来释放分配的内存。
CLOSE cursor_name;
5)例子
DECLARE
c_id customers.id%type; //声明用于接收游标各个字段值的变量,变量的类型用 表名.字段名%type 来获取对应字段的数据类型
c_name customers.name%type;
c_addr customers.address%type;
CURSOR c_customers is //声明游标
SELECT id, name, address FROM customers;
BEGIN
OPEN c_customers; //打开游标
LOOP
FETCH c_customers into c_id, c_name, c_addr; //获取当前游标执行值
EXIT WHEN c_customers%notfound; //当游标指向末尾时,终止遍历
dbms_output.put_line(c_id || ' ' || c_name || ' ' || c_addr);
END LOOP;
CLOSE c_customers;
END;
PL/SQL学习笔记之游标的更多相关文章
- PL/SQL学习笔记_02_游标
在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现. 为了处理 SQL 语句, ORACLE 必须分配一片叫上下文( context area )的区域来处理所必需的信息,其中包括要处 ...
- ORALCE PL/SQL学习笔记
ORALCE PL/SQL学习笔记 详情见自己电脑的备份数据资料
- Oracle之PL/SQL学习笔记
自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
- [Oracle] PL/SQL学习笔记
-- 1. 使用一个变量 declare -- Local variables here v_name ); begin -- Test statements here select t.user_n ...
- PL\SQL学习笔记
注释 单行--多行 一.declare一般用于做变量的申明.begin 程序体开始执行 end; 程序体结束exception .. dbms_output.put_line('绝对值'||v_ab ...
- PL/SQL学习笔记_01_基础
PL/SQL语句可以在Oracle客户端的 SQL窗口或者 command 窗口中运行 在SQL窗口中运行步骤同 SQL语句 在command 窗口中运行的步骤如下: 1)File—new com ...
- PL/SQL学习笔记程序单元
一:程序单元组成 一个PL/SQL程序单元主要包括三部分: 声明与定义部分:声明变量.常量.类型等:定义过程.函数等: 执行部分:执行PL/SQL语句:调用过程.参数:处理游标等: 异常处理部分:处理 ...
- PL/SQL学习笔记之包
一:包 包是由一组相关的函数,过程,变量,游标等PL/SQL程序设计元素的组合而成的一个PL/SQL程序单元,相当于Java中的类. 包的主要作用是封装:把相同或相似的东西归类,方便维护和管理,提高开 ...
- PL/SQL学习笔记之异常
一:异常 程序执行过程中出现错误情况被称为异常,主要有两种类型的异常: 系统定义的异常 用户定义的异常 二:系统定义的异常 Exception Oracle Error SQLCODE 描述 ACCE ...
随机推荐
- IO中File类基本使用
package chapter10; import java.io.File; public class TestFile01 { public static void main(String[] a ...
- 2017-2018-2 20155309 南皓芯 Exp5 MSF基础应用
实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如ms08_067; 1.2 一个针对浏览器的攻击,如ms11_05 ...
- jq:翻页时,保存上页多选框checkbox选中状态
这里主要讲一种:中间的 checkbox 是 通过Ajax调出的. 则翻页时,为了保存上页的选定状态,可在页面中定义一个变量,用来存储选中状态的值. <input class="cli ...
- POJ 3662 Telephone Lines (二分+Dijkstra: 最小化第k大的值)
题意 Farmer John想从电话公司修一些电缆连接到他农场.已知N个电线杆编号为1,2,⋯N,其中1号已经连接电话公司,N号为农场,有P对电线杆可连接. 现给出P对电线杆距离Ai,Bi,Li表示A ...
- POJ 2377 Bad Cowtractors (Kruskal)
题意:给出一个图,求出其中的最大生成树= =如果无法产生树,输出-1. 思路:将边权降序再Kruskal,再检查一下是否只有一棵树即可,即根节点只有一个 #include <cstdio> ...
- 点分治 poj1741
题意: 给出一颗树,询问有多少对点对距离<=k 链接: http://poj.org/problem?id=1741 题解: 点分治的模板题 点分治即采用分治思想分而治之 考虑一颗子树内距离&l ...
- 统计难题 HDU1251
简单方法: #include<bits/stdc++.h> using namespace std; int main() { ]; map<string,int>ma; ) ...
- 090实战 Hadoop离线项目介绍(不包括程序)
一:项目场景 1.需求分析 根据用户行为数据进行程序的处理,得到结果保存到关系型数据库中 需要收集用户(系统使用者)在不同客户端上产生的用户行为数据,最终保存到hdfs上 需要明确收集字段的相关信息, ...
- C#中将string转换为float
string s = "123.2"; //方法1 float f1 = Convert.ToSingle(s); //方法2 float f2; if (!float.TryPa ...
- C语言程序内存的分区
本文转载自:https://blog.csdn.net/shulianghan/article/details/20472269 C语言程序内存分配 (1) 内存分区状况 栈区 (stack) : ...