oracle游标问题-求救大哥大姐们

y112102 2011-12-12 02:14:59
代码:
declare
sp varchar2(10);
cursor c_sp is
select sp from t_sp s;
begin
open c_sp;
fetch c_sp
into sp;
while c_sp %found loop
fetch c_sp
into sp;
dbms_output.put_line('我是游标:' || sp);
end loop;
close c_sp;
end;

游标建立过程没有报错 输出结果:
我是游标:
我是游标:
我是游标:
我是游标:
我是游标:
我是游标:
我是游标:
我是游标:
---上传图片要搞链接地址?原谅我没搞出来来。

表:t_sp是有数据的
为什么输出结果不是‘我是游标:(数数据集合行的值)’
求解?
...全文
94 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dzntree 2011-12-13
  • 打赏
  • 举报
回复
你最开始的代码没什么问题,我自己测试了下,也能出结果,只是发现c_sp %found中间多了个空格
y112102 2011-12-12
  • 打赏
  • 举报
回复
问题好了 谢谢大哥的热情帮助
y112102 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 major57 的回复:]
SQL code


declare
sp t_sp.sp%type;
cursor c_sp is select sp from t_sp;
begin
--加一个这个dbms_output.enable(99999999999999);
dbms_output.enable(99999999999999);
open c_sp;
……
[/Quote]
可以了 谢谢大哥
y112102 2011-12-12
  • 打赏
  • 举报
回复
恩 语法格式我知道了
我吧循环去掉就正常输出
如果我加循环就提示
输出则提示缓存区溢出。
9楼的大哥 你的那个
dbms_output.enable(99999999999999);
这个不行啊
major57 2011-12-12
  • 打赏
  • 举报
回复

declare
sp t_sp.sp%type;
cursor c_sp is select sp from t_sp;
begin
--加一个这个dbms_output.enable(99999999999999);
dbms_output.enable(99999999999999);
open c_sp;
loop
fetch c_sp into sp;
exit when c_sp%notfound;

dbms_output.put_line('我是游标:' || sp);
end loop;
close c_sp;
end;
major57 2011-12-12
  • 打赏
  • 举报
回复
5L的应该没问题....
y112102 2011-12-12
  • 打赏
  • 举报
回复
恩 谢谢各位 顺便问下
在oracle中申明游标的时候不可以
declare
t_sp varchar2(50);
cursor c_sp is
select into t_sp from t_sp s;
这样? (我这个t_sp的类型有问题)我的意思是y游标中可以申明一个变量 把查询的集合放到里面去吗?

第2个问题:
我把语句写好后没有错误如果用循环 输出则提示缓存区溢出
我在pl/sql命令窗口中 输出 set serveroutput on size 300000 还是提示超过10000
求解
xpingping 2011-12-12
  • 打赏
  • 举报
回复
declare
cursor csr_sp is select sp from t_sp;
row_t_sp csr_sp%type;
begin
open csr_sp;
for row_t_sp in csr_sp
loop
dbms_output.put_line('我是游标:' || row_t_sp.sp );
end loop;
close csr_sp;
end;
andyguan01_2 2011-12-12
  • 打赏
  • 举报
回复
试试这个:
declare
sp t_sp.sp%type;
cursor c_sp is select sp from t_sp;
begin
open c_sp;
loop
fetch c_sp into sp;
exit when c_sp%notfound;

dbms_output.put_line('我是游标:' || sp);
end loop;
close c_sp;
end;
y112102 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 s3068770 的回复:]
while c_sp %found loop
fetch c_sp
into sp; dbms_output.put_line('我是游标:' || sp);
end loop;
****************************
while循环里不用再次获取游标。
[/Quote]

我去掉fetch c_sp
into sp;
就报错了 提示:
pls-00103出现符号"end-of-file"在需要下列只时:
<an identifier>
<a double-quoted delimited-identifier>
符号":"被替换"end-of-line"继续
y112102 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yixilan 的回复:]
你的SP字段是有值的么?
建议定义变量的时候,变量不要和字段名同名:
sp varchar2(10);
[/Quote]

它输出的结果就是没有值
我改成这样就报错了
declare
t_sp varchar2(50);
cursor c_sp is
select into t_sp from t_sp s;
begin
open c_sp;
fetch c_sp
into t_sp;
while c_sp %found loop
fetch c_sp
into t_sp;
dbms_output.put_line('我是游标:' || t_sp);
end loop;
close c_sp;
end;

我在申明游标的时候那个查询语句加了into 就错了
t_sp的是 肯定是来源表 而表里面肯定是有数据的
恩 关于不要用sp 我知道了 我习惯了这2个字母
s3068770 2011-12-12
  • 打赏
  • 举报
回复
while c_sp %found loop
fetch c_sp
into sp;
dbms_output.put_line('我是游标:' || sp);
end loop;
****************************
while循环里不用再次获取游标。
yixilan 2011-12-12
  • 打赏
  • 举报
回复
你的SP字段是有值的么?
建议定义变量的时候,变量不要和字段名同名:
sp varchar2(10);

17,088

社区成员

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

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