oracle游标定义(oracle 游标是做什么用的)

:暂无数据 2026-09-20 21:10:06 :0

oracle游标定义(oracle 游标是做什么用的)

大家好,关于oracle游标定义很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于oracle 游标是做什么用的的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

本文目录

oracle 游标是做什么用的

游标(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语句的执行结果决定是否需要插入新记录。

Oracle下如何用sql创建游标

For 循环游标

(1)定义游标

(2)定义游标变量

(3)使用for循环来使用这个游标

declare
       --类型定义
       cursor c_job
       is
       select empno,ename,job,sal
       from emp
       where job=’MANAGER’;
       --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型
       c_row c_job%rowtype;
begin
       for c_row in c_job loop
         dbms_output.put_line(c_row.empno||’-’||c_row.ename||’-’||c_row.job||’-’||c_row.sal);
       end loop;
end;

Fetch游标

使用的时候必须要明确的打开和关闭

declare 
       --类型定义
       cursor c_job
       is
       select empno,ename,job,sal
       from emp
       where job=’MANAGER’;
       --定义一个游标变量
       c_row c_job%rowtype;
begin
       open c_job;
         loop
           --提取一行数据到c_row
           fetch c_job into c_row;
           --判读是否提取到值,没取到值就退出
           --取到值c_job%notfound 是false 
           --取不到值c_job%notfound 是true
           exit when c_job%notfound;
            dbms_output.put_line(c_row.empno||’-’||c_row.ename||’-’||c_row.job||’-’||c_row.sal);
         end loop;
       --关闭游标
      close c_job;
end;

oracle存储过程中定义游标

你为什么要放到begin之后呢?正确写法应该是:
create or replace procedure SP_TEST as
title1_value varchar2(30);
number1_value integer:=0;
CURSOR c_1 IS SELECT city_name,COUNT(city_name) FROM view_alarm_KZ1 GROUP BY city_name;
begin
open c_1;
LOOP
FETCH c_1 INTO title1_value,number1_value;
EXIT WHEN c_1%NOTFOUND;
INSERT INTO TFA_ALARM_COUNTER_KZ(TITLE1,Collection_Time,Kz1) VALUES(title1_value,sysdate,number1_value);
END LOOP;
CLOSE c_1;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
end;

oracle在存储过程中定义游标

create table emp 
( id varchar2(10),
name varchar2(20),
sex number,
duty varchar2(20)
);
insert into emp values(’001’,’Tom’,1,’gcs’);
insert into emp values(’002’,’John’,1,’dba’);
insert into emp values(’003’,’Jean’,0,’gcs’);
insert into emp values(’004’,’Reid’,1,’gcs’);
commit;
create or replace procedure pro6 as
  cursor cr is
    select *
      from emp
     where sex = 1
       and duty = ’gcs’;
begin
  for cr_result in cr loop
    begin
      dbms_output.put_line(’ID: ’ || cr_result.id || ’ NAME: ’ ||
                           cr_result.name);
    
    end;
  end loop;
end pro6;

oracle存储过程中定义游标,请问游标定义语句中能使用变量么

不是这样的,存储过程中不是非要用游标啊,他有输入和输出参数,只要在过程中做相应的处理就会返回输出参数。游标的作用主要是为了循环提取数据,游标分隐性游标和显性游标。
举个例子(显性游标):
cursor
游标名
is
select
语句;
.....
while
游标名%
found
loop
.....
end
loop;
其中的select
语句提取的是一列值,然后每次取一个进行下面的循环。
(隐性游标):
for
游标名
in
(select
语句)loop
.....
.....
end
loop;
其中的select
语句提取的也是一列值,然后每次取一个进行下面的循环。

oracle中什么是显性游标什么是隐性游标

游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以使用游标来访问结果集中的任意一行数据,提取当前行的数据后,即可对该行数据进行操作。
􀁺游标分为显式游标和隐式游标:
–当可执行部分发生一个SQL语句时,PL/SQL建立一个隐式游标,它定义SQL标识符,PL/SQL自动管理这一游标。
–显式游标由程序员显式说明及控制,用于从表中取出多行数据,并将多行数据一行一行单独处理
隐式游标被用于描述执行的SQL命令
􀁺游标具有属性,可以使用游标属性测试SQL 命令的结果。
􀁺游标属性有4种,对显式游标和隐式游标都有效使用时,需要以游标名称作为前缀,使用隐式游标方法及含义如下:
–SQL%ROWCOUNT受SQL影响的行数
–SQL%FOUNDBoolean 值,是否还有数据
–SQL%NOTFOUNDBoolean 值,是否已无数据
–SQL%ISOPEN总是为FALSE
显式游标可以用于暂存查询取出的多行数据,然后一行一行的进行处理。
􀁺显式游标按行处理查询返回的多行数据,而SELECT…INTO只能取出一行数据。
􀁺在PL/SQL块中通过循环手动控制游标的多行取操作,直到取出游标中所有的数据为止。

关于oracle游标定义,oracle 游标是做什么用的的介绍到此结束,希望对大家有所帮助。

oracle游标定义(oracle 游标是做什么用的)

本文编辑:admin

本文相关文章:


office版本哪个最好用(Word哪个版本最好用)

office版本哪个最好用(Word哪个版本最好用)

大家好,关于office版本哪个最好用很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于Word哪个版本最好用的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年9月4日 23:10

coreldraw12简体中文版下载(到哪下载CorelDraw12又快又好)

coreldraw12简体中文版下载(到哪下载CorelDraw12又快又好)

本篇文章给大家谈谈coreldraw12简体中文版下载,以及到哪下载CorelDraw12又快又好对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月1日 07:10

comfortably(comfort的形容词和副词)

comfortably(comfort的形容词和副词)

“comfortably”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看comfortably(comfort的形容词和副词)!

2026年8月6日 12:00

桌面虚拟化软件(VMware Workstation是什么)

桌面虚拟化软件(VMware Workstation是什么)

各位老铁们,大家好,今天由我来为大家分享桌面虚拟化软件,以及VMware Workstation是什么的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年7月9日 15:20

mysql workbench(mysql workbench 怎麽使用)

mysql workbench(mysql workbench 怎麽使用)

这篇文章给大家聊聊关于mysql workbench,以及mysql workbench 怎麽使用对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年6月27日 07:00

iem里约major(IEM里约Major战队巡礼 GamerLegion篇)

iem里约major(IEM里约Major战队巡礼 GamerLegion篇)

本篇文章给大家谈谈iem里约major,以及IEM里约Major战队巡礼 GamerLegion篇对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年10月9日 10:40

access denied for user root ip(连接mysql数据库时报错:Access denied for user ’root’@’localhost’ (using password: NO))

access denied for user root ip(连接mysql数据库时报错:Access denied for user ’root’@’localhost’ (using password: NO))

今天给各位分享连接mysql数据库时报错:Access denied for user ’root’@’localhost’ (using password: NO)的知识,其中也会对连接mysql数据库时报错:Access denied

2026年10月4日 00:10

oppperror怎么处理(c语言库函数中有error函数吗)

oppperror怎么处理(c语言库函数中有error函数吗)

大家好,今天小编来为大家解答以下的问题,关于oppperror怎么处理,c语言库函数中有error函数吗这个很多人还不知道,现在让我们一起来看看吧!

2026年9月25日 12:40

oracle中文版(oracle是什么意思)

oracle中文版(oracle是什么意思)

大家好,今天小编来为大家解答以下的问题,关于oracle中文版,oracle是什么意思这个很多人还不知道,现在让我们一起来看看吧!

2026年9月24日 00:00

文档编辑软件哪个好(手机word软件哪个好用 以下六个软件供你选择)

文档编辑软件哪个好(手机word软件哪个好用 以下六个软件供你选择)

各位老铁们好,相信很多人对文档编辑软件哪个好都不是特别的了解,因此呢,今天就来为大家分享下关于文档编辑软件哪个好以及手机word软件哪个好用 以下六个软件供你选择的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月15日 12:30

更多文章:


怎么做网站网页归档(网页应该怎么做网页设计有哪些要求)

怎么做网站网页归档(网页应该怎么做网页设计有哪些要求)

大家好,怎么做网站网页归档相信很多的网友都不是很明白,包括网页应该怎么做网页设计有哪些要求也是一样,不过没有关系,接下来就来为大家分享关于怎么做网站网页归档和网页应该怎么做网页设计有哪些要求的一些知识点,大家可以关注收藏,免得下次来找不到哦

2026年10月11日 05:30

跷二郎腿太低好吗?想要通过贴墙站改正二郎腿影响的话,有哪些要点需要注意

跷二郎腿太低好吗?想要通过贴墙站改正二郎腿影响的话,有哪些要点需要注意

本篇文章给大家谈谈二郎腿贴地,以及跷二郎腿太低好吗对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月11日 05:10

易语言点击js按钮(易语言网页填表怎样点击链接为“javascript:void(0)“的按钮)

易语言点击js按钮(易语言网页填表怎样点击链接为“javascript:void(0)“的按钮)

本篇文章给大家谈谈易语言点击js按钮,以及易语言网页填表怎样点击链接为“javascript:void(0)“的按钮对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要

2026年10月11日 03:00

regards(Regards,什么意思)

regards(Regards,什么意思)

其实regards的问题并不复杂,但是又很多的朋友都不太了解Regards,什么意思,因此呢,今天小编就来为大家分享regards的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 01:10

dom4j文档(如何去掉用dom4j生成的XML文档中的)

dom4j文档(如何去掉用dom4j生成的XML文档中的)

其实dom4j文档的问题并不复杂,但是又很多的朋友都不太了解如何去掉用dom4j生成的XML文档中的,因此呢,今天小编就来为大家分享dom4j文档的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 01:00

compare with造句(用compared with和compared to造句)

compare with造句(用compared with和compared to造句)

“compare with造句”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看compare with造句(用compared with和compared to造句)!

2026年10月10日 23:30

xshell软件(Xshell怎么更改字体大小)

xshell软件(Xshell怎么更改字体大小)

各位老铁们好,相信很多人对xshell软件都不是特别的了解,因此呢,今天就来为大家分享下关于xshell软件以及Xshell怎么更改字体大小的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月10日 22:50

tensorflow与keras对应版本(为什么tensorflow2.8没有keras)

tensorflow与keras对应版本(为什么tensorflow2.8没有keras)

各位老铁们好,相信很多人对tensorflow与keras对应版本都不是特别的了解,因此呢,今天就来为大家分享下关于tensorflow与keras对应版本以及为什么tensorflow2.8没有keras的问题知识,还望可以帮助大家,解决

2026年10月10日 22:10

个人网站首页界面(深圳社会保险服务个人网页主页)

个人网站首页界面(深圳社会保险服务个人网页主页)

“个人网站首页界面”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看个人网站首页界面(深圳社会保险服务个人网页主页)!

2026年10月10日 22:00

maven仓库jar网站(如何在maven仓库中添加jar包)

maven仓库jar网站(如何在maven仓库中添加jar包)

这篇文章给大家聊聊关于maven仓库jar网站,以及如何在maven仓库中添加jar包对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月10日 19:50

最近更新

hp421笔记本usb启动(HP笔记本421-LJ745PA 如何设置BIOS设置USB-CDROM启动HP新BIOS)
2026-10-11 11:20:04 浏览:0
热门文章

by网站域名444(444ppp现在是什么域名)
2026-08-19 20:20:31 浏览:13
韩国大片视频mv(韩国20个感人mv)
2026-07-11 13:10:02 浏览:12
标签列表