oracle学习 九 游标的使用(持续更)
为什么要使用?
笔者查阅了一些资料之后得到的结论是,
关系型数据库是面向集合的,而游标是面向行的,游标可对取出来的集合(结果集)中每一行进行相同或不同的操作,还提供对基于游标位置而对表中数据进行删除或更新的能力,某些特 殊的查询操作也可以通过游标去完成,让你在查询暂时没办法的时候多了一种选择。
游标的类型?
游标分为:
1、fetch 定义的游标名 into 游标变量
2、for 游标变量 in 游标名 loop
两种方式,其中for方式是隐式游标,可以对数据库后台进行打开关闭的操作,fetch是显示游标,需要操作者自行打开关闭,关于二者优劣网上说法不一,但是个人来看,还是for的方 式比较简便。
游标语法:
有以下例子:
for:
declare
--定义游标
cursor c_job
is
--查询的语句
select user_id,user_name from t_user_info;
--定义游标变量
c_row c_job%rowtype;
begin
--使用游标变量在游标中进行检索
for c_row in c_job loop
dbms_output.put_line(c_row.user_id||'-'||c_row.user_name);
--循环条件结束
end loop;
end;
fetch:
DECLARE
-- 定义游标.
CURSOR c_test_main IS
SELECT user_id, user_name FROM t_user_info;
-- 保存游标数据的变量
v_main_data c_test_main%ROWTYPE;
BEGIN
-- 打开游标.
OPEN c_test_main;
LOOP
-- 填充数据(主表).
FETCH c_test_main INTO v_main_data;
-- 假如没有检索到(主表)数据,结束循环处理
Exit when c_test_main%NOTFOUND; dbms_output.put_line(v_main_data.user_id||'-'||v_main_data.user_name); END LOOP;
-- 关闭游标
CLOSE c_test_main;
END;
备注?
1、
dbms_output.put_line('输出内容');
2、
游标变量名 表名%rowtype 游标变量名 游标名%rowtype
个人测试了以下,声明游标变量的两种方法中
游标变量名 游标名%rowtype
这种方式运行的速度更快一点,它是再说这个变量是一行数据的实例,
类似于游标里的一行数据。而
游标变量名 表名%rowtype 这个方法是说这个变量是表中的一个实例,类似于表里的一行数据。
一种简单的操作方法也可以是这样的:
declare
n_count number;
begin
for cur_record in(
--游标要查询的集合
select t.category_id from AM_CATEGORY t)
loop
--游标执行的内容
execute immediate 'update am_'||cur_record.category_id||'_entry set storage_id=null where storage_id is not null';
DBMS_output.put_line('update am_'||cur_record.category_id||'_entry set storage_id=null where storage_id is not null');
end loop;
--commit;
end;
其中excute immediate是为了解决动态拼接表名进行游标式表数据更新的一种方式 ,EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交 ,刚动态拼接的表不会马上存在,1. EXECUTE IMMEDIATE会让这个表理科变成真实的表,这样就可以及时使用了
cur_record.category_id:游标名.查询的字段名称
不是动态的表一般不用到
excute immediate
如:
declare
cur_entryid number;
begin
for cur_entryid in(
--游标要查询的集合
select entry_id from AM_AJ_ENTRY )
loop
--游标执行的内容
delete from AM_AJ_datum t where t.entry_id =cur_entryid.entry_id;
end loop;
--commit;
end;
oracle学习 九 游标的使用(持续更)的更多相关文章
- (七)Oracle学习笔记—— 游标
1.游标简介 游标用来处理从数据库中检索的多行记录(使用SELECT语句).利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集. 为了处理SQL语句,Oracle将在内存中分配一个区域,这就是 ...
- Oracle学习(七)游标
一.简介 定义 实质上是数据集,类似数组一样,把查询的数据集存储在内存当中. 使用时可以通过游标指向其中一条记录,也可以通过循环游标达到循环数据集的目的. 游标的种类 显式游标: 使用之前必须得先声明 ...
- Oracle学习笔记之四sp1,Oracle 11g的常用函数
从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i) 分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...
- Oracle学习线路
出自huyangg的博客,地址是:oracle学习路线图 1.sql.pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验) 作为oracle的基本功,需要大家对sql和 ...
- oracle 学习笔记
--2.2 进入和退出oracle数据库--在windows中输入cmd打开命令窗口 然后输入 sqlplu / as sysdba--验证数据库是否安装成功 --select status from ...
- Java调用oracle存储过程通过游标返回临时表数据
注:本文来源于 < Java调用oracle存储过程通过游标返回临时表数据 > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...
- oracle学习--循环语句
oracle学习--循环语句 loop循环: create or replace procedure pro_test_loop is i number; begin i:=0; loop i:=i ...
- Oracle学习笔记—数据字典和常用命令(转载)
转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...
- oracle学习 第二章 限制性查询和数据的排序 ——03
这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7 怎样使用转义(escape)操作符 ...
随机推荐
- HDU 2610 (自己完全找不到思路) Sequence one
搜索虐我千百遍,我待搜索...好吧,我还木有初恋 题意: 我开始理解题意就理解偏了,Orz 题中有n个元素构成的序列,求出前p个非递减子序列.子序列是先按长度排序的,然后按原序列先后位置排序的. 这里 ...
- 【第二篇】.NET用NPOI读取Excel表格并在页面预览
博主用的是npoi2.0.1,支持.xls也支持.xlsx 直接上代码吧. <table class="table table-bordered table-striped" ...
- [转] 解析Qt资源文件使用
解析Qt资源文件使用 转自:http://mobile.51cto.com/symbian-270121.htm 本文详细的介绍了Qt文件的使用,和大部分GUI框架设计工具一样,Qt也引入了资源文件系 ...
- mysql日期函数(转)
MySQL 获得当前日期时间 函数 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | n ...
- 【C#学习笔记】文本复制到粘贴板
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- (三)用Normal Equation拟合Liner Regression模型
继续考虑Liner Regression的问题,把它写成如下的矩阵形式,然后即可得到θ的Normal Equation. Normal Equation: θ=(XTX)-1XTy 当X可逆时,(XT ...
- IOS设计模式之三(适配器模式,观察者模式)
本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...
- vm虚拟机挂载usb
首先得保证能在VM里看到usb设备,如图
- mysql 概念和逻辑架构
1.MySQL整体逻辑架构 mysql 数据库的逻辑架构如下图: 第一层,即最上一层,所包含的服务并不是MySQL所独有的技术.它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安 ...
- Dispatcher
Dispatcher是guava EventBus的事件分发器. Dispatcher是抽象类, 抽象方法: abstract void dispatch(Object event, Iterator ...