do $$ 
declare
    _id_emp integer;
    _id_ped integer;
    _id_ped_item integer;
    
    _id_grd_estq varchar;
    _id_dep integer;
    
    _qtd_max_pag integer;
    _pag integer;
    
    _list refcursor;
    _item record;
begin
    _id_emp := 1;
    _id_ped := nextval('sq_ped');
    
    _id_grd_estq := '000';
    _id_dep := 1;
    
    _qtd_max_pag := 800;
    _pag := 3;
          
    insert into tb_ped
        (id_emp, id_ped, dt_ped, sit, tp_ped)
    values
        (_id_emp, _id_ped, current_date, 'P', 'CAR');
    
    
    open _list for
        select
            tb_item.id_item,
            tb_item.id_und_med,
            tb_item_estq.vl_estq as vl_qtd,
            tb_item_emp.vl_cst_rep as vl_unt,
            tb_item_estq.vl_estq * tb_item_emp.vl_cst_rep as vl_tot
        from tb_item
        join tb_item_emp on
            (tb_item.id_item = tb_item_emp.id_item and
             tb_item_emp.id_emp = _id_emp)
        join tb_item_estq on
            (tb_item.id_item = tb_item_estq.id_item and
             tb_item_estq.id_emp = tb_item_emp.id_emp and
             tb_item_estq.id_dep = _id_dep and
             tb_item_estq.id_grd_estq = _id_grd_estq)
        where
            tb_item_estq.vl_estq > 0
        order by
            tb_item.id_item
        limit _qtd_max_pag
        offset _pag * _qtd_max_pag;
         
    fetch _list into _item;
    
    _id_ped_item := 0;
    
    while found loop
        
        _id_ped_item := _id_ped_item + 1;
    
        insert into tb_ped_item
            (id_emp, id_ped, id_ped_item, id_item, 
             id_und_med, vl_qtd, vl_unt, vl_tot, id_dep, id_grd_estq)
        values
            (_id_emp, _id_ped, _id_ped_item, _item.id_item,
             _item.id_und_med, _item.vl_qtd,_item.vl_unt, _item.vl_tot, _id_dep, _id_grd_estq);
    
        fetch _list into _item;
        
    end loop;
    
    raise notice 'Items: %' , _id_ped_item;
end $$;