怎么判断oracle游标 oracle游标是什么意思

游标是什么?ORACLE是怎样使用游标的?举例说明!一
游标是什么
游标字面理解就是游动的光标 。
用数据库语言来描述:游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了 , 将游标放置到某行后,即可对该行数据进行操作,例如提取当前行的数据等 。

游标的分类
显式游标和隐式游标
显式游标的使用需要4步:
1.
声明游标
CURSOR
【怎么判断oracle游标 oracle游标是什么意思】mycur(vartype
number)
is
select
emp_no,emp_zc
from
cus_emp_basic
where
com_no
=
vartype;
2.
打开游标
open
mycur(000627)
注:000627是参数
3.
读取数据
fetch
mycur
into
varno,
varprice;
4.
关闭游标
close
mycur;

游标的属性
oracle
游标有4个属性:%ISOPEN,%FOUND , %NOTFOUND , %ROWCOUNT 。
%ISOPEN判断游标是否被打开,如果打开%ISOPEN等于true,否则等于false;
%FOUND
%NOTFOUND判断游标所在的行是否有效,如果有效,则%FOUNDD等于true , 否则等于false;
%ROWCOUNT返回当前位置为止游标读取的记录行数 。

示例
set
serveroutput
on;
declare
varno
varchar2(20);
varprice
varchar2(20);
CURSOR
mycur(vartype
number)
is
select
emp_no,emp_zc
from
cus_emp_basic
where
com_no
=
vartype;
begin
if
mycur%isopen
=
false
then
open
mycur(000627);
end
if;
fetch
mycur
into
varno,varprice;
while
mycur%found
loop
dbms_output.put_line(varno||','||varprice);
if
mycur%rowcount=2
then
exit;
end
if;
fetch
mycur
into
varno,varprice;
end
loop;
close
mycur;
end;
PL/SQL记录的结构和C语言中的结构体类似,是由一组数据项构成的逻辑单元 。
PL/SQL记录并不保存在数据库中,它与变量一样,保存在内存空间中,在使用记录时候,要首先定义记录结构,然后声明记录变量 。可以把PL/SQL记录看作是一个用户自定义的数据类型 。
set
serveroutput
on;
declare
type
person
is
record
(
empno
cus_emp_basic.emp_no%type,
empzc
cus_emp_basic.emp_zc%type);
person1
person;
cursor
mycur(vartype
number)is
select
emp_no,emp_zc
from
cus_emp_basic
where
com_no=vartype;
begin
if
mycur%isopen
=
false
then
open
mycur(000627);
end
if;
loop
fetch
mycur
into
person1;
exit
when
mycur%notfound;
dbms_output.put_line('雇员编号:'||person1.empno||',地址:'||person1.empzc);
end
loop;
close
mycur;
end;
典型游标for
循环
游标for循环示显示游标的一种快捷使用方式,它使用for循环依次读取结果集中的行数据,当form循环开始时 , 游标自动打开(不需要open) , 每循环一次系统自动读取游标当前行的数据(不需要fetch) , 当退出for循环时 , 游标被自动关闭(不需要使用close) 。使用游标for循环的时候不能使用open语句,fetch语句和close语句,否则会产生错误 。
set
serveroutput
on;
declare
cursor
mycur(vartype
number)is
select
emp_no,emp_zc
from
cus_emp_basic
where
com_no=vartype;
begin
for
person
in
mycur(000627)
loop
dbms_output.put_line('雇员编号:'||person.emp_no||',地址:'||person.emp_zc);
end
loop;
end;
Oracle中 如何在游标中进行判断?LOOP
BEGIN
FETCH id_cursor
INTO v1, v2, v3, v4;--把游标里的四个值分别赋值到四个变量中
EXIT WHEN id_cursor%NOTFOUND;
IF v1 = 'xxx'--比如想判断游标中第一个变量的值,就这样if一下
THEN
xxx
ELSE
xxx
IF v2 = 'xxx'--判断第二个也一样
THEN
xxx
ELSE
xxx
END IF;
EXCEPTION
xxx
END;
END LOOP;
CLOSE id_cursor;
记得自己声明变量和游标名字……
不知道你是问这个不
oracle 游标变量怎么判断游标是静态的,相当于常量
游标变量是动态随时可以赋值的相当于变量
具体请看:和
Oracle游标怎么判断到最后了?笨方法在打开游标之前先确定数据的行数,在游标里面计数 , 然后判断计数器是否和之前的行数相等
ORACLE
中可以使用SQL%ROWCOUNT
Oracle游标使用总结 Oracle游标分为显示游标和隐式游标
显示游标(Explicit Cursor):在PL/SQL程序中定义的 用于查询的游标称作显示游标
隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的 而且是在PL/SQL中使用UPDATE/DELETE语句时 Oracle系统自动分配的游标
一 显示游标
使用步骤
( )定义 ( )打开 ( )使用 ( )关闭
使用演示
首先创建测试用表STUDENT 脚本如下
( ) 使用WHILE循环处理游标
create or replace PROCEDURE PROC_STU AS
BEGIN
显示游标使用 使用while循环
declare
定义游标 名称为cur_stu
cursor cur_stu is
select stuno stuname from student order by stuno;
定义变量 存放游标取出的数据
v_stuno varchar( );
v_stuname varchar( );
begin
打开游标cur_stu
open cur_stu;
将游标的当前行取出存放到变量中
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; 关闭游标
end;
END PROC_STU ;
( ) 使用IF ELSE代替WHILE循环处理游标
create or replace PROCEDURE PROC_STU AS
BEGIN
显示游标使用 使用if判断
declare
定义游标 名称为cur_stu
cursor cur_stu is
select stuno stuname from student order by stuno;
定义变量 存放游标取出的数据
v_stuno varchar( );
v_stuname varchar( );
begin
打开游标cur_stu
open cur_stu;
将游标的当前行取出存放到变量中
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; 关闭游标
end;
END PROC_STU ;
( ) 使用FOR循环处理游标
create or replace PROCEDURE PROC_STU 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_STU ;
( ) 常用的使用EXIT WHEN处理游标
create or replace
PROCEDURE PROC_STU _ AS
BEGIN
显示游标使用 使用exit when循环
declare
定义游标 名称为cur_stu
cursor cur_stu is
select stuno stuname from student order by stuno;
定义变量 存放游标取出的数据
v_stuno varchar( );
v_stuname varchar( );
begin
打开游标cur_stu
open cur_stu;
loop
将游标的当前行取出存放到变量中
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; 关闭游标
end;
END PROC_STU _ ;
二 隐式游标
使用演示
create or replace PROCEDURE PROC_STU AS
BEGIN
隐式游标使用
update student set stuname= 张燕广 where stuno= ;
如果更新没有匹配则插入一条新记录
if SQL%NOTFOUND then
insert into student(STUNO STUNAME AGE GENDER)
values( 张燕广 男 );
end if;
END PROC_STU ;
说明
所有的SQL语句在上下文区内部都是可执行的 因为都有一个游标指向上下文区 此游标就是
SQL游标 与现实游标不同的是 SQL游标在PL/SQL中不需要打开和关闭 而是在执行UPDATE
DELETE是自动打开和关闭
上面例子中就是通过SQL%NOTFOUND游标属性判断UPDATE语句的执行结果决定是否需要插入新记录 CREATE TABLE STUDENT (
STUNAME VARCHAR ( BYTE)
STUNO VARCHAR ( BYTE)
AGE NUMBER
GENDER VARCHAR ( CHAR)
lishixinzhi/Article/program/Oracle/201311/17531
oracle游标和游标变量的区别?oracle游标是数据库中一个命名的工作区,当游标被声明后,他就与一个固定的SQL想关联,在编译时刻是已知的,是静态的.它永远指向一个相同的查询工作区.\x0d\x0a游标变量可以在运行时刻与不同的SQL语句关联,在运行时可以取不同的SQL语句.它可以引用不同的工作区.\x0d\x0aoracle游标和游标变量是不能相互代替的.\x0d\x0a如何定义游标类型\x0d\x0aTYPE ref_type_name IS REF CURSOR [RETURN return_type];\x0d\x0a声明游标变量\x0d\x0acursor_name ref_type_name;\x0d\x0a \x0d\x0aref_type_name 是后面声明游标变量时要用到的我们的游标类型(自定义游标类型,即CURSOR是系统默认的,ref_type_name是我们定义的 );return_type代表数据库表中的一行,或一个记录类型\x0d\x0aTYPE ref_type_name IS REF CURSOR RETURN employee%TYPE\x0d\x0aRETURN 是可选的,如果有是强类型,可以减少错误,如果没有return是弱引用,有较好的灵活性.\x0d\x0a \x0d\x0a不能在包头里面声明游标变量,注意,但可以定义游标类型,要注意这二者的区别.\x0d\x0a可以声明游标变量作为函数或过程的形式参数.\x0d\x0a%TYPE一个列类型\x0d\x0a%ROWTYPE行类型\x0d\x0a控制oracle游标变量\x0d\x0aOPEN-FOR(打开游标变量,与多行查询连接起来) FETCH(从结果集中取行数据),close(关闭游标变量)\x0d\x0aBULK COLLECT子句将游标变量中的行一次性提取到一个集合中.
关于怎么判断oracle游标和oracle游标是什么意思的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读