oracle查询游标行数,如何查找Oracle PL/SQL游标中的记录数量?

NB:我刚才重读你的问题..你要失败的。如果只有1个记录.. 我会后在某一时刻有新的更新..

,让我们开始在这里..

从的Oracle®数据库PL/SQL用户指南和参考 10g第2版(10.2) 型号B14261-01 reference

所有行在你打开游标时重新锁定,而不是在取出游标时锁定。当您提交或回滚事务时,这些行将被解锁。由于行不再被锁定,所以在提交后无法从FOR UPDATE游标读取。

所以你不需要担心记录解锁。

所以试试这个..

declare

CURSOR mytable_cur IS SELECT * FROM MY_TABLE WHERE SALARY < 50000 FOR UPDATE;

TYPE mytable_tt IS TABLE OF mytable_cur %ROWTYPE

INDEX BY PLS_INTEGER;

l_my_table_recs mytable_tt;

l_totalcount NUMBER;

begin

OPEN mytable_cur ;

l_totalcount := 0;

LOOP

FETCH mytable_cur

BULK COLLECT INTO l_my_table_recs LIMIT 100;

l_totalcount := l_totalcount + NVL(l_my_table_recs.COUNT,0);

--this is the check for only 1 row..

EXIT WHEN l_totalcount < 2;

FOR indx IN 1 .. l_my_table_recs.COUNT

LOOP

--process each record.. via l_my_table_recs (indx)

END LOOP;

EXIT WHEN mytable_cur%NOTFOUND;

END LOOP;

CLOSE mytable_cur ;

end;

ALTERNATE ANSWER 我看了你的答案向后启动,以为你想退出,如果有更多的则1排..不是正好有一个。所以这是我以前的答案。

2个简单的方法来检查只有1条记录。

选项1 - 显式去抓取

declare

CURSOR C1 IS SELECT * FROM MY_TABLE WHERE SALARY < 50000 FOR UPDATE;

l_my_table_rec C1%rowtype;

l_my_table_rec2 C1%rowtype;

begin

open C1;

fetch c1 into l_my_table_rec;

if c1%NOTFOUND then

--no data found

end if;

fetch c1 into l_my_table_rec2;

if c1%FOUND THEN

--i have more then 1 row

end if;

close c1;

-- processing logic

end;

我希望你的想法。

选择2 - 异常捕获

declare

CURSOR C1 IS SELECT * FROM MY_TABLE WHERE SALARY < 50000 FOR UPDATE;

l_my_table_rec C1%rowtype;

begin

begin

select *

from my_table

into l_my_table_rec

where salary < 50000

for update;

exception

when too_many_rows then

-- handle the exception where more than one row is returned

when no_data_found then

-- handle the exception where no rows are returned

when others then raise;

end;

-- processing logic

end;

此外 记住:用显式游标..你可以%键入您的变量关闭光标记录而不是原始表。

当您在查询中加入时,这特别有用。

此外,rememebr您可以用

UPDATE table_name

SET set_clause

WHERE CURRENT OF cursor_name;

类型语句更新表中的行,但我认为如果你还没有“获取”第二行只会工作..

有关游标FOR循环一些更多的信息.​​.尝试 Here

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值