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)操作符 ...
随机推荐
- 51nod1119 机器人走方格 V2
终于学到了求组合数的正确姿势 //C(n+m-2,m-1) #include<cstdio> #include<cstring> #include<cctype> ...
- Ref相关的名词解释
NV (NOT-VOLATILE),即非易失性,断电不会丢失的存储信息,包括生产信息.客户信息.产品信息等等. 它们都保存在不同(FLASH)分区,并根据不同的分区提供不同的接口.数据结构和管理机制. ...
- phonegap 检查是否有网络
在主active onCreate函数中实现 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(sa ...
- 《Unix网络编程》卷2 读书笔记 第2章- Posix IPC
1. 概述 Posix IPC 包括:Posix消息队列.Posix信号量.Posix共享内存区 Posix IPC在访问它们的函数和描述它们的信息上有一些类似点. 本章讲述所有这些共同属性:用于标识 ...
- JS面向对象组件(四) -- 面向对象的继承
什么是继承 •在原有对象的基础上,略作修改,得到一个新的对象 •不影响原有对象的功能 //父类 createPerson function createPerson(name,sex){ this.n ...
- 支持多种浏览器的纯css下拉菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- myeclipse svn配置
在MyEclipse 9.0中安装SVN插件遇到一些问题,参考网上一些方法,最终解决.以下是个人认为比较简易的方法,供参考: 安装过程: (1)svn的插件版本site-1.8.14.zip(可根据自 ...
- js实现密码加密
http://www.cnblogs.com/mofish/archive/2012/02/25/2367858.html 1.base64加密 在页面中引入base64.js文件,调用方法为: &l ...
- Java并发编程-总纲
Java 原生支持并发,基本的底层同步包括:synchronized,用来标示一个方法(普通,静态)或者一个块需要同步执行(某一时刻,只允许一个线程在执行代码块).volatile,用来标识一个变量是 ...
- 把两个DataTable连接起来,相当于Sql的Inner Join方法
在C#中把两个DataTable连接起来,相当于Sql的Inner Join方法 作者:浪漫十一狼在下面的例子中实现了3个Join方法,其目的是把两个DataTable连接起来,相当于Sql的Inne ...