知识大全 oracle游标
Posted 语句
篇首语:不登高山,不知天之高也;不临深溪,不知地之厚也。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle游标相关的知识,希望对你有一定的参考价值。
为了处理SQL语句 Oracle将在内存中分配一个区域 这就是上下文区 这个区包含了已经处理完的行数 指向被分析语句的指针 整个区是查询语句返回的数据行集 游标就是指向上下文区句柄或指针
两种游标
一 显示游标(需要明确定义!)
显示游标被用于处理返回多行数据的SELECT 语句 游标名通过CURSOR… IS 语句显示地赋给SELECT 语句
在PL/SQL中处理显示游标所必需的四个步骤
)声明游标 CURSOR cursor_name IS select_statement
)为查询打开游标 OPEN cursor_name
)取得结果放入PL/SQL变量中
FETCH cursor_name INTO list_of_variables;
FETCH cursor_name INTO PL/SQL_record;
)关闭游标 CLOSE cursor_name
注意 在声明游标时 select_statement不能包含INTO子句 当使用显示游标时 INTO子句是FETCH语句的一部分
显式游标
select语句上 使用显式游标
能明确访问结果集
for循环游标
参数游标
解决多行记录的查询问题
fetch游标
二 隐式游标
所有的隐式游标都被假设为只返回一条记录
使用隐式游标时 用户无需进行声明 打开及关闭 PL/SQL隐含地打开 处理 然后关掉游标
例如
……
SELECT studentNo studentName
INTO curStudentNo curStudentName
FROM StudentRecord
WHERE name= gg ;
上述游标自动打开 并把相关值赋给对应变量 然后关闭 执行完后 PL/SQL变量curStudentNo curStudentName中已经有了值
隐式游标
单条sql语句所产生的结果集合
用关键字SQL表示隐式游标
个属性 %rowcount 影响的记录的行数 整数
%found 影响到了记录 true
%notfound 没有影响到记录 true
%isopen 是否打开 布尔值 永远是false
多条sql语句 隐式游标SQL永远指的是最后一条sql语句的结果
主要使用在update 和 delete语句上
实际操作和例子
( )FOR循环游标 (常用的一种游标)
< >定义游标
< >定义游标变量
< >使用for循环来使用这个游标
前向游标 只能往一个方向走
效率很高
declare
类型定义
cursor cc is select empno ename job sal
from emp where job = MANAGER ;
定义一个游标变量
ccrec cc%rowtype;
begin
for循环
for ccrec in cc loop
dbms_output put_line(ccrec empno|| ||ccrec ename|| ||ccrec job|| ||ccrec sal);
end loop;
end;
( ) fetch游标
使用的时候 必须要明确的打开和关闭
declare
类型定义
cursor cc is select empno ename job sal
from emp where job = MANAGER ;
定义一个游标变量
ccrec cc%rowtype;
begin
打开游标
open cc;
loop循环
loop
提取一行数据到ccrec中
fetch cc into ccrec;
判断是否提取到值 没取到值就退出
取到值cc%notfound 是false
取不到值cc%notfound 是true
exit when cc%notfound;
dbms_output put_line(ccrec empno|| ||ccrec ename|| ||ccrec job|| ||ccrec sal);
end loop;
关闭游标
close cc;
end;
游标的属性 种
%notfound fetch是否提到数据 没有true 提到false
%found fetch是否提到数据 有true 没提到false
%rowcount 已经取出的记录的条数
%isopen 布尔值 游标是否打开
( )参数游标
按部门编号的顺序输出部门经理的名字
declare
部门
cursor c is select deptno from dept;
参数游标c 定义参数的时候
只能指定类型 不能指定长度
参数只能出现在select语句=号的右侧
cursor c (no number pjob varchar ) is select emp * from emp
where deptno = no and job=pjob;
c rec c %rowtype;
c rec c %rowtype;
定义变量的时候要指定长度
v_job varchar ( );
begin
部门
for c rec in c loop
参数在游标中使用
for c rec in c (c rec deptno MANAGER ) loop
dbms_output put_line(c rec deptno|| ||c rec ename);
end loop;
end loop;
end;
( )引用游标/动态游标
select语句是动态的
declare
定义一个类型(ref cursor)弱类型
type cur is ref cursor;
强类型(返回的结果集有要求)
type cur is ref cursor return emp%rowtype;
定义一个ref cursor类型的变量
cura cur;
c rec emp%rowtype;
c rec dept%rowtype;
begin
DBMS_output put_line( 输出员工 ) ;
open cura for select * from emp;
loop
fetch cura into c rec;
exit when cura%notfound;
DBMS_output put_line(c rec ename) ;
end loop ;
DBMS_output put_line( 输出部门 ) ;
open cura for select * from dept;
loop
fetch cura into c rec;
exit when cura%notfound;
DBMS_output put_line(c rec dname) ;
end loop;
close cura;
cha138/Article/program/Oracle/201311/18404相关参考
Oracle游标使用总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle游标分为显示
Oracle学习手册:Oracle游标使用大全二 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Oracle数据库游标的类型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 游标是SQL的一个内
Oracle数据库游标使用大全 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SQL是用于访问O
快速掌握Oracle数据库游标的使用方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 显式游标
Oracle游标提取相关的数据的语法介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文主要
Oracle游标的删除与更新实际操作步骤 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以下的文
Oracle查看和修改其最大的游标数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以下的文章主
cha138/Article/program/Oracle/201311/19107