oracle游标声明中使用变量赋值,Oracle游标使用方法(游标里使用变量绑定)
来源:http://www.jzxue.com/shujuku/oracle/200910/01-2839.html
游标(CURSOR)也叫光标,在关系数据库中经常使用,在PL/SQL程序中可以用CURSOR与SELECT一起对表或者视图中的数据进行查询并逐行读取。
Oracle游标分为显示游标和隐式游标。
显示游标(Explicit Cursor):在PL/SQL程序中定义的、用于查询的游标称作显示游标。
隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的、而且是在PL/SQL中使用UPDATE/DELETE语句时,Oracle系统自动分配的游标。
一.显示游标
1.使用步骤
(1)定义 (2)打开 (3)使用 (4)关闭
2.使用演示
首先创建测试用表STUDENT,脚本如下:
CREATE TABLE "STUDENT" (
"STUNAME" VARCHAR2(10 BYTE),
"STUNO" VARCHAR2(4 BYTE),
"AGE" NUMBER,
"GENDER" VARCHAR2(2 CHAR)
)
(1).使用WHILE循环处理游标
create or replace PROCEDURE PROC_STU1 AS
BEGIN
--显示游标使用,使用while循环
declare
--1.定义游标,名称为cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
--定义变量,存放游标取出的数据
v_stuno varchar(4);
v_stuname varchar(20);
begin
--2.打开游标cur_stu
open cur_stu;
--3.将游标的当前行取出存放到变量中
fetch cur_stu into v_stuno,v_stuname;
while cur_stu%found --游标所指还有数据行,则继续循环
loop
--打印结果
dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
--继续将游标所指的当前行取出放到变量中
fetch cur_stu into v_stuno,v_stuname;
end loop;
close cur_stu; --4.关闭游标
end;
END PROC_STU1;
(2).使用IF..ELSE代替WHILE循环处理游标
create or replace PROCEDURE PROC_STU2 AS
BEGIN
--显示游标使用,使用if判断
declare
--1.定义游标,名称为cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
--定义变量,存放游标取出的数据
v_stuno varchar(4);
v_stuname varchar(20);
begin
--2.打开游标cur_stu
open cur_stu;
--3.将游标的当前行取出存放到变量中
fetch cur_stu into v_stuno,v_stuname;
loop
if cur_stu%found then --如果游标cur_stu所指还有数据行
--打印结果
dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
--继续将游标所指的当前行取出放到变量中
fetch cur_stu into v_stuno,v_stuname;
else
exit;
end if;
end loop;
close cur_stu; --4.关闭游标
end;
END PROC_STU2;
(3).使用FOR循环处理游标
create or replace PROCEDURE PROC_STU3 AS
BEGIN
--显示游标使用,使用for循环
declare
--定义游标,名称为cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
begin
for stu in cur_stu
loop
dbms_output.PUT_LINE(stu.stuno||'->'||stu.stuname);
--循环做隐含检查 %notfound
end loop;
--自动关闭游标
end;
END PROC_STU3;
(4).常用的使用EXIT WHEN处理游标
create or replace
PROCEDURE PROC_STU1_1 AS
BEGIN
--显示游标使用,使用exit when循环
declare
--1.定义游标,名称为cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
--定义变量,存放游标取出的数据
v_stuno varchar(4);
v_stuname varchar(20);
begin
--2.打开游标cur_stu
open cur_stu;
loop
--3.将游标的当前行取出存放到变量中
fetch cur_stu into v_stuno,v_stuname;
exit when cur_stu%notfound; --游标所指还有数据行,则继续循环
--打印结果
dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
end loop;
close cur_stu; --4.关闭游标
end;
END PROC_STU1_1;
二.隐式游标
1.使用演示
create or replace PROCEDURE PROC_STU4 AS
BEGIN
--隐式游标使用
update student set stuname='张燕广' where stuno='1104';
--如果更新没有匹配则插入一条新记录
if SQL%NOTFOUND then
insert into student(STUNO,STUNAME,AGE,GENDER)
values('1104','张燕广',18,'男');
end if;
END PROC_STU4;
2.说明
所有的SQL语句在上下文区内部都是可执行的,因为都有一个游标指向上下文区,此游标就是SQL游标,与现实游标不同的是,SQL游标在PL/SQL中不需要打开和关闭,而是在执行UPDATE、 DELETE是自动打开和关闭。
上面例子中就是通过SQL%NOTFOUND游标属性判断UPDATE语句的执行结果决定是否需要插入新记录。
----------------------------------------------------------------------------------------
游标里面如何使用变量绑定?
示例如下:
declare
type rc is ref cursor;
l_rc rc;
l_dummy all_objects.object_name%type;
l_start number default dbms_utility.get_time;
begin
for i in 1 .. 1000
loop
open l_rc for
'select object_name
from all_objects
where object_id = :x'
using i;
fetch l_rc into l_dummy;
close l_rc;
end loop;
dbms_output.put_line
( round( (dbms_utility.get_time-l_start)/100, 2 ) ||
' seconds...' );
end;
oracle游标声明中使用变量赋值,Oracle游标使用方法(游标里使用变量绑定)相关推荐
- oracle游标循环定义变量赋值,PL/SQL 循环 数组 游标的使用
1.创建存储过程 create or replace procedure test(var_name_1 in type,var_name_2 out type) as --声明变量(变量名 变量类型 ...
- 变量: 赋值 的几种方法
from SQL-Server documentation 示例 A. 输出使用 SET 初始化的变量值 下例创建 @myvar 变量,将一个字符串值放在变量中,并输出 @myvar 变量的值. DE ...
- java成员变量怎么赋值_给成员变量赋值的两种方法
JAVA 跟C++ 差不多,给类里面的私有成员变量一般有两种方法: 一种是通过 成员函数 来赋值 一种是:通道构造函数来赋值 /* 我们一直在使用构造方法,但是,我们确没有定义构造方法,用的是哪里来的 ...
- php 用count 变量,countif函数的使用方法 PHP的可变变量名的使用方法分享
通常变量通过下面这样的语句来命名 : 复制代码 代码如下: 可变变量名指的是使用一个变量的值作为这个变量的名称.在上面的例子中,通过使用两个$符号,你可以把hello设置成一个变量的名称,就像下面那样 ...
- oracle声明一个表变量赋值,Oracle Declare 变量声明
declare 在 Oracle 一般是用在函数.存储过程和块结构及简单的事务中. 普通变量 声明declare v_number number(10); -- 长度10 v_char varchar ...
- oracle绑定变量赋值,Oracle教程之绑定变量
绑定变量是指在sql语句的条件中使用变量而不是常量.比如shared pool里有两条sql语句, select * from tab1 where col1=1; select * from tab ...
- oracle取得表中总记录数最快的方法
查询表中的记录总数的语法就是SELECT COUNT(*) FROM TABLE_NAME.这可能是最经常使用的一类SQL语句. 本文讨论怎样才能最快的得到这个记录数.本文纯粹主要是理论上的讨论,文章 ...
- sql server linkserver oracle,SQL Server中使用Linkserver连接Oracle的方法
1.安装Oracle Client 连接到Oracle的前提是在SQL Server服务器上安装Oracle Client.Oracle Client下载地址如下: 安装完毕后要修改对应的tnsnam ...
- springboot数据源oracle,springboot+mybatis中使用多数据源oracle数据库
写在前面:工作原因,使用的是oracle数据库.由于之前没有接触过,写一篇博客做点笔记. 如果要在springboot项目中连接oracle,首先肯定是要先加入依赖,但是好像在maven仓库里没有or ...
最新文章
- 王朝阳:河北高校邀请赛 -- 二手车交易价格预测决赛答辩
- Mac是大脑,iPad是四肢 如何实现的呢?右键而已
- java的indexof怎么配合数组使用_【小知识点??】indexOf在数组中竟能这样使用???!...
- DevOps 实践:千里之行
- oracle9i 随机端口_修改 Oracle9i 8080端口问题
- OSS在线迁移服务剖析
- java单词查找树_Trie 单词查找树 java实现(来自算法第4版)
- 地图距离算法_ORB-SLAM3 单目地图初始化(终结篇)
- 解读最具O2O属性—哈根达斯微信企业号的成功之道
- oracle的查询数据(检索数据)
- 国家自然科学基金申请书写作攻略
- 贵阳市建筑物矢量数据(Shp格式+带高度)
- Excel中将汉字(名字)转换为拼音
- 汽车4G车载TBOX智能信息终端
- 挑选微信h5开发制作公司的标准是什么?
- mysql dbms是什么_数据库管理系统(DBMS)是用来做什么的?
- 大数据练习题答案(仅供参考)
- 华大半导体HC32F4A0笔记(五),使用CMSIS-DSP库进行FFT运算
- 单片机跑马灯程序c语言,MCS-51单片机控制跑马灯的三种方法
- EasyPlayer-RTSP-Android安卓播放器播放RTSP延迟优化策略,极低延时!
热门文章
- 自动驾驶车辆在结构化场景中基于HD-Map由粗到精语义定位
- 在CentOS 6.3 64bit上使用 smartmontools和MageCli 监测硬盘的健康状态
- 【C4D教程】Octane渲染大师班
- C++ STL: 超详细 容器 deque 以及 适配器queue 和 stack 源码分析
- xBIM 实战01 在浏览器中加载IFC模型文件
- ReentrantLock+线程池+同步+线程锁
- python pexpect包的一些用法
- Vue源码终笔-VNode更新与diff算法初探
- Java面试查漏补缺
- 《学习OpenCV》第三章习题 第3题