oracle存储过程遍历游标问题
代码如下emp表里就一条数据createorreplaceprocedureTestCur3iscursorcurisselectename,job,salfrommye...
代码如下 emp表里 就一条数据
create or replace procedure TestCur3 is
cursor cur is select ename,job,sal from myemp;
pname myemp.ename%type;
pjob myemp.job%type;
psal myemp.sal%type;
begin
open cur;
loop
exit when cur%notfound;
fetch cur into pname,pjob,psal;
dbms_output.put_line(pname||'的工作是'||pjob||',薪水是'||psal);
end loop;
close cur;
end TestCur3;
这样遍历出来的 结果 是2条 为什么?
create or replace procedure TestCur3 is
cursor cur is select ename,job,sal from myemp;
pname myemp.ename%type;
pjob myemp.job%type;
psal myemp.sal%type;
begin
open cur;
loop
fetch cur into pname,pjob,psal;
exit when cur%notfound;
dbms_output.put_line(pname||'的工作是'||pjob||',薪水是'||psal);
end loop;
close cur;
end TestCur3;
这样遍历 结果是1条记录 为什么 先fetch在判断 就是一条结果 先判断在fetch就是2条结果,新手请高手详细说明 谢谢 展开
create or replace procedure TestCur3 is
cursor cur is select ename,job,sal from myemp;
pname myemp.ename%type;
pjob myemp.job%type;
psal myemp.sal%type;
begin
open cur;
loop
exit when cur%notfound;
fetch cur into pname,pjob,psal;
dbms_output.put_line(pname||'的工作是'||pjob||',薪水是'||psal);
end loop;
close cur;
end TestCur3;
这样遍历出来的 结果 是2条 为什么?
create or replace procedure TestCur3 is
cursor cur is select ename,job,sal from myemp;
pname myemp.ename%type;
pjob myemp.job%type;
psal myemp.sal%type;
begin
open cur;
loop
fetch cur into pname,pjob,psal;
exit when cur%notfound;
dbms_output.put_line(pname||'的工作是'||pjob||',薪水是'||psal);
end loop;
close cur;
end TestCur3;
这样遍历 结果是1条记录 为什么 先fetch在判断 就是一条结果 先判断在fetch就是2条结果,新手请高手详细说明 谢谢 展开
3个回答
展开全部
第二段代码是对的,
第一段代码是错的,你有没有发现,你第一段代码 的两条,后一条 应该是空值
还没有 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, 此时如果没有值, 你仍然进行输出
-- 第三轮循环,判断第二轮循环是否取到值,没有值,退出
其实你只要一行值符合要求
第一段代码是错的,你有没有发现,你第一段代码 的两条,后一条 应该是空值
还没有 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, 此时如果没有值, 你仍然进行输出
-- 第三轮循环,判断第二轮循环是否取到值,没有值,退出
其实你只要一行值符合要求
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
提取游标的一条数据,游标对的索引会向后移一位。没有提取的话,初始值其实不是在游标的第一个索引位,而是起始位(介于打开第一个索引位,就绪状态),当提取时游标才指向第一个索引位,提取后移动下一个索引位。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询