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
總結
以上是生活随笔為你收集整理的oracle查询游标行数,如何查找Oracle PL/SQL游标中的记录数量?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aov建立Java模拟,数据结构之---
- 下一篇: oracle遍历表做查询,oracle