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;