例を示しています(もしあなたが望むのは、テストケースごとの理由だけではなく、なぜそうだと思いますか?)、結果を非常に簡単に達成できます。私は
create table HOTELS (hname varchar2(50)) ; --create table for test
declare --put data into it for test
i number ;
begin
for i in 1 .. 50 loop
insert into hotels (hname) values('Hotel: ' || i);
end loop ;
commit ;
end ;
/
は、プロシージャを作成し、その結果に結果を得るために
set serveroutput on
declare
resultQuery sys_refcursor ;
countOfHotels number ;
hotelName HOTELS.hname%type ;
procedure getHotels(HotelCount out number ,
HotelList out nocopy sys_refcursor) is
begin
select count(*)
into HotelCount
FROM HOTELS ;
open HOTELLIST For
select *
from HOTELS ;
end getHotels;
begin
getHotels(countOfHotels, resultQuery) ;
dbms_output.put_line('Count Of Hotels ' || countOfHotels);
loop
fetch resultQuery into hotelName;
exit when resultQuery%notfound;
dbms_output.put_line('Found Hotel: ' || hotelName);
end loop;
end ;
そして今を表示--nowをお見せするために一緒にテストケースを置く:
/**
results
Count Of Hotels 50
Found Hotel: Hotel: 1
Found Hotel: Hotel: 2
Found Hotel: Hotel: 3
Found Hotel: Hotel: 4
Found Hotel: Hotel: 5
....
**/
が、すべての作業ここで行われます:
procedure getHotels(HotelCount out number ,
HotelList out nocopy sys_refcursor) is
begin
select count(*)
into HotelCount
FROM HOTELS ;
open HOTELLIST For
select *
from HOTELS ;
end getHotels;
You 変数に選択オープンREFCURSOR FORカーソル
そこにはいくつのホテルがありますか?わずか30の場合は、結果セットを返し、クライアントコードでカウントします。ページングする必要がある場合(つまり、クライアントに完全なデータを返すことができない場合)に限り、サーバー側のカウントが心配です。 – Thilo