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)操作符 ...
随机推荐
- Codeforces 475 B Strongly Connected City【DFS】
题意:给出n行m列的十字路口,<代表从东向西,>从西向东,v从北向南,^从南向北,问在任意一个十字路口是否都能走到其他任意的十字路口 四个方向搜,搜完之后,判断每个点能够访问的点的数目是否 ...
- iso中AutoLayout和Autoresizing Mask的区别
•在iOS6之前,关于屏幕旋转的适配和iPhone,iPad屏幕的自动适配,基本都是由Autoresizing Mask来完成的.但是随着大家对iOS App的要求越来越高,以及今后可能出现的多种屏幕 ...
- LeetCode Reverse Linked List II 反置链表2
题意:将指定的一段位置[m,n]的链表反置,返回链表头. 思路:主要麻烦在链表头,如果要从链表头就开始,比较特殊. 目前用DFS实现,先找到m-1的位置,再找到n+1的位置,中间这段就是否要反置的,交 ...
- zipline
history 多只股票时会返回某几只股票停牌没数据 if not symbol(stock) in data: 聚宽 多只股票如果某几只没有发行 600485: nan 多只股票如果某几只停牌 60 ...
- MySQL连接问题浅析
MySQL的客户端,无论是PHP或者Java,都会发起多个连接来提高系统的吞吐量.在云里面的服务器,因为一些设计和实现上的不同,有一些问题被放大了,同时也带了一些新的问题. 连接的超时时间 在Azur ...
- 2015-10-09 Fri 晴 加快进度看书
最近老感觉每天不够用,每天7点起来,吃饭完了8点开始看书,不知道是我看书太慢了还是时间过得真的很快,不知不觉中午就到了.而这个时候我才看2章的内容,下午能多看3章内容.一本书也就一天的时候,而我现在还 ...
- struts2中错误处理
定义一个 package,然后其他package都继承 这个package struts-global 就 有了这个错误处理功能了 然后再自己写个类 struts.xml <constant n ...
- 继承TextView简单画一个尺子
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; impor ...
- vector容器总结.xml
1 清空所有元素 m_itemVector.clear(); 2 遍历 vector<ITEM_CHECK>::iterator iter=m_itemVector.b ...
- 苹果将通过新Apple TV打造电视游戏平台 欲发力家庭游戏(转)
据<纽约时报>报道,9月10日凌晨1时举行的苹果发布会上将会公布新版Apple TV设备,还会推出TV版App Store.新设备以游戏作为主要卖点,图形性能将大幅提升. 苹果2015年秋 ...