PLSQL存储过程输出问题

我单身呢 2017-11-08 10:37:17
create or replace procedure p_test3(v_begin_date date,v_end_date date)
is
cursor c_test1 is select * from test1 where (v_begin_date<=end_date)
and (v_end_date>=begin_date);
begin

for v_test1 in c_test1 loop
if v_begin_date<=v_end_date then

dbms_output.put_line(v_test1.id||'---'||v_test1.begin_date||'------'||v_test1.end_date);
else
dbms_output.put_line('开始日期不能大于结束日期');
end if;
end loop;
end;
--
begin
p_test3(to_date('2017-01-21','yyyy-mm-dd'),to_date('2017-01-20','yyyy-mm-dd'));
end;
得到的是两条数据:
开始日期不能大于结束日期;
开始日期不能大于结束日期;

为什么会得到两条这种数据,不应该是一条么?该怎么修改?
...全文
415 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
我单身呢 2017-11-10
  • 打赏
  • 举报
回复
引用 3 楼 qq646748739 的回复:
test1表有两条数据。你是for循环遍历导致的。
create or replace procedure p_test3(v_begin_date date,v_end_date date) is cursor c_test1 is select * from test1 where (v_begin_date<=end_date) and (v_end_date>=begin_date); begin if v_begin_date<=v_end_date then for v_test1 in c_test1 loop dbms_output.put_line(v_test1.id||'---'||v_test1.begin_date||'------'||v_test1.end_date); end loop; else dbms_output.put_line('开始日期不能大于结束日期'); end if; end; 这样就行了。我搞定了,谢谢
我单身呢 2017-11-10
  • 打赏
  • 举报
回复
引用 4 楼 qq646748739 的回复:
解决方法也很简单: 1.去掉for循环。 2.直接判断v_begin_date和v_end_date即可。
查询出来的有多条记录,不用游标for循环的话貌似不行额。新手。
碧水幽幽泉 2017-11-09
  • 打赏
  • 举报
回复
解决方法也很简单: 1.去掉for循环。 2.直接判断v_begin_date和v_end_date即可。
碧水幽幽泉 2017-11-09
  • 打赏
  • 举报
回复
test1表有两条数据。你是for循环遍历导致的。
acen_chen 2017-11-09
  • 打赏
  • 举报
回复
用游标循环了。。。。
卖水果的net 2017-11-09
  • 打赏
  • 举报
回复
test1 表中有几条记录?你使用了 loop 循环。

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧