Postgresql 我的函数不是为所有从游标获取的记录生成数据,而是只为一条记录生成数据 为什么不使用一个简单的插入到。。。选择而不是这个缓慢且不可缩放的光标循环?一个插入。。。“输入选择…”将比使用光标逐行处理快得多 Begin open cur_room
我的函数不是为所有从游标获取的记录生成数据,而是只为一条记录生成数据Postgresql 我的函数不是为所有从游标获取的记录生成数据,而是只为一条记录生成数据 为什么不使用一个简单的插入到。。。选择而不是这个缓慢且不可缩放的光标循环?一个插入。。。“输入选择…”将比使用光标逐行处理快得多 Begin open cur_room ,postgresql,Postgresql,我的函数不是为所有从游标获取的记录生成数据,而是只为一条记录生成数据 为什么不使用一个简单的插入到。。。选择而不是这个缓慢且不可缩放的光标循环?一个插入。。。“输入选择…”将比使用光标逐行处理快得多 Begin open cur_room ; -- Cursor Loop Beginning. loop fetch cur_room into roomid,floorid,hostelid,roomtype;
为什么不使用一个简单的
插入到。。。选择
而不是这个缓慢且不可缩放的光标循环?一个插入。。。“输入选择…”
将比使用光标逐行处理快得多
Begin
open cur_room ;
-- Cursor Loop Beginning.
loop
fetch cur_room into roomid,floorid,hostelid,roomtype;
exit when not found;
rcount := rcount +1;
raise info 'No of rows % ',rcount;
bedid := (select max(b.id) from bed b);
if bedid is not null
then
bedid := bedid +1 ;
else
bedid := 1;
end if;
hid := hostelid;
fid := floorid;
rid := roomid;
rtype := roomtype;
raise info ' Change in roomtype % ',rtype;
for rcount in 1 ..2810
loop
if roomtype = 'Single' then
bposition := 'Center';
bedno := 1;
bedallot := 'N';
createdt := to_date('01/01/2018','dd/mm/yyyy');
updatedt := to_date('01/01/2018','dd/mm/yyyy');
vacatedt := to_date('31/12/9999','dd/mm/yyyy');
end if;
-- Double Bed Loop Beginning.
loop
exit when tmpbedno > 2;
if roomtype = 'Double' then
bedno := tmpbedno;
if bedno = 1 then
bposition := 'Left';
else
bposition := 'Right';
end if;
bedallot := 'N';
createdt := to_date('01/01/2018','dd/mm/yyyy');
updatedt := to_date('01/01/2018','dd/mm/yyyy');
vacatedt := to_date('31/12/9999','dd/mm/yyyy');
end if;
tmpbedno = tmpbedno+1;
--Double Bed Loop End.
-- end loop;
tmpbedno := 1;
-- Triple Bed Loop Beginning.
loop
exit when tmpbedno > 3;
if roomtype = 'Triple' then
bedno := tmpbedno;
if bedno = 1 then
bposition := 'Left';
else if bedno = 2 then
bposition := 'Right';
else
bposition := 'Center';
end if;
end if;
bedallot := 'N';
createdt := to_date('01/01/2018','dd/mm/yyyy');
updatedt := to_date('01/01/2018','dd/mm/yyyy');
vacatedt := to_date('31/12/9999','dd/mm/yyyy');
end if;
tmpbedno = tmpbedno+1;
-- Triple Bed Loop End.
-- end loop;
raise info 'Hostel Id Here % ',hid;
raise info 'Floor Id Here % ',fid;
raise info 'Room Id Here %',rid;
raise info 'Room Type %',roomtype;
raise info 'Bed Position % ',bposition;
raise info 'Bed Number % ',bedno;
/* INSERT INTO bed (id, hostel_id,floor_id,room_id,bed_no,
position,alloted,vacated_date,created_at,updated_at)
values (bedid,hostelid,floorid,roomid,bedno,
bposition,bedallot,vacatedt,createdt,updatedt); */
tmp := 'Inserted ' || bedid || hostelid || floorid || roomid || bedno || bposition || bedallot || bedallot || vacatedt || createdt || updatedt ;
bedid = bedid+1;
raise info ' Record % ',tmp;
end loop;
end loop;
end loop;
-- Cursor Loop End.
end loop;
close cur_room;