oracle如何遍历游标 oracle遍历游标的方法

oracle如何实现遍历查询?declare
teacher_name varchar(20)------------跟teacher表中老师名字类型保持一致
cursor t_name is select teachername from teacher---------申明游标t_name为从teacher表中查询老师名字
begin
open t_name;------打开游标t_name
【oracle如何遍历游标 oracle遍历游标的方法】loop-------开始循环(遍历)
fetch t_name into teacher_name-------将老师名字值赋予变量teacher_name
if t_name%found-------------开始遍历有值时插入以下数据
then
select name,count(*) into new_table
from table_teacher_student
where name=teacher_name group by name-----将一个老师名字依据条件插入新表数据
else
dmbs_output.put_line(‘完成所有工作’)oracle如何遍历游标;---------遍历结束时输出完成工作
exitoracle如何遍历游标;
end if;
end loop;
仓促写下以上内容oracle如何遍历游标,可能部分语法报错,思路就是这样,很基本oracle如何遍历游标的一个游标使用 。
oracle中如何定义一个游标,打开一个游标,并遍历--创建一个测试用表
CREATE TABLE test_main (
idINT,
valueVARCHAR(10),
PRIMARY KEY(id)
);
--插入测试数据
INSERT INTO test_main(id, value) VALUES (1, 'ONE');
INSERT INTO test_main(id, value) VALUES (2, 'TWO');
INSERT INTO test_main(id, value) VALUES (3, 'THREE');
--游标举例
DECLARE
-- 定义游标.
CURSOR c_test_main IS
SELECT id, value FROM test_main;
-- 保存游标数据oracle如何遍历游标的变量
v_main_datac_test_main%ROWTYPE;
BEGIN
-- 打开游标.
OPEN c_test_main;
LOOP
-- 填充数据(主表).
FETCH c_test_main INTO v_main_data;
-- 假如没有检索到(主表)数据oracle如何遍历游标,结束循环处理
Exit when c_test_main%NOTFOUND;
dbms_output.put_line(TO_CHAR(v_main_data.id)
|| ':' || v_main_data.value );
END LOOP;
-- 关闭游标
CLOSE c_test_main;
END;
/
希望对oracle如何遍历游标你有帮助 。
oracle 游标遍历问题应该是存储过程里有异常没处理
在END P1;的前面加上这一句
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE exception_name;
END P1;
Oracle游标使用总结 Oracle游标分为显示游标和隐式游标
显示游标(Explicit Cursor):在PL/SQL程序中定义oracle如何遍历游标的 用于查询oracle如何遍历游标的游标称作显示游标
隐式游标(Implicit Cursor):是指非PL/SQL程序中定义oracle如何遍历游标的 而且是在PL/SQL中使用UPDATE/DELETE语句时 Oracle系统自动分配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存储过程遍历游标问题第二段代码是对的 ,
第一段代码是错的,你有没有发现,你第一段代码的两条 , 后一条 应该是空值
还没有 fetch,不应该判断cur%notfound;
在fetch后,才应该判断 cur%notfound;
看看你的第一段代码:
open cur;
loop
exit when cur%notfound;
fetch cur into pname,pjob,psal;
dbms_output.put_line(pname||'的工作是'||pjob||' , 薪水是'||psal);
end loop;
close cur;
-- 第一轮循环,fetch到值 , 进行输出
-- 第二轮循环,判断第一轮循环是否取到值; 然后fetch,此时如果没有值 , 你仍然进行输出
-- 第三轮循环,判断第二轮循环是否取到值 , 没有值,退出
其实你只要一行值符合要求
oracle如何遍历游标的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle遍历游标的方法、oracle如何遍历游标的信息别忘了在本站进行查找喔 。

    推荐阅读