LINHA ESPECIFICA DE UM CURSOR

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
CESAR_CARVALHO
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qui, 29 Jun 2006 3:03 pm
Localização: MARINGA-PR
Cesar Luis de Carvalho
Maringá-PR

Caros amigos, como faço para inicar a leitura de um cursor a partir da X linha? Por exemplo, fiz a leitura de um cursor que possui 300 linhas até a 150, sai dela e quero continuar a partir da linha 151. alguém sabe como fazer isto?
Abraços,
Cesar
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Você tem alguma sequence nesta tabela?
Talvez conseguisse com Rownum, não sei se seria muito confiável.
Avatar do usuário
fabricio.silva
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 34
Registrado em: Seg, 12 Mar 2007 7:07 am
Localização: Catanduva/SP
Fabricio M. Silva
Oracle Certified Associate
------------------------------
Catanduva - SP

Olá,

Acho mais fácil e melhor em questão de performance, você usar uma PL/SQL Table.

Joga tudo pra PL/SQL Table e depois só trabalha com on indices

Abs
CESAR_CARVALHO
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qui, 29 Jun 2006 3:03 pm
Localização: MARINGA-PR
Cesar Luis de Carvalho
Maringá-PR

Fabrício, obrigado pela dica. você teria algum modelo de como usar a PL/SQL TABLE?


Trevisolli, no caso da sequence, creio que nào funcionaria.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Cesar,

Realmente, pela PK, por exemplo, daria certo, caso você quisesse continuar à partir de um determinado valor de uma coluna, como no exemplo abaixo:

Selecionar tudo



DECLARE
  CURSOR CUR_LISTA ( P_NRO_INICIAL NUMBER )
    IS 
      SELECT *
        FROM TB_TESTE
       WHERE ID >= P_NRO_INICIAL; 
BEGIN 
 FOR X IN CUR_LISTA(6)
 LOOP
  dbms_output.put_line('ID: ' || X.ID || ' Nro. Nf: ' || X.NRO_NF);
 END LOOP;
END;

DESC TB_TESTE;

Processing ...
DESC TB_TESTE;
Describing TB_TESTE....
NAME                            Null?     Type
------------------------------- --------- -----
NRO_NF                                    VARCHAR2(10)
ID                              NOT NULL  NUMBER(10,0) -- PK


Agora, caso queira continuar pela quantidade de linhas já exibidas, a dica do Fabrício se encaixa legal, creio eu.

Você poderia trabalhar pelo índice da PL/SQL table.

Aqui mesmo no fórum tem um exemplo:

http://glufke.net/oracle/viewtopic.php?p=2513


qualquer coisa, manda ai.
Avatar do usuário
fabricio.silva
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 34
Registrado em: Seg, 12 Mar 2007 7:07 am
Localização: Catanduva/SP
Fabricio M. Silva
Oracle Certified Associate
------------------------------
Catanduva - SP

Fala Cesar, ai vai:

Selecionar tudo

declare
  -- Declaraçao do registro
  type rec_func is record
   (codigo               t_func.codigo%type,
    nome                 t_func.nome%type,
    cargo                varchar2(20));

  -- aqui é a declaraçao da pl/sql table
  type tab_func is table of rec_func index by binary_integer;

  -- variavel
  var_func      tab_func;

  cursor c_func is
    select
      rownum,
      codigo,
      nome,
      cargo
    from
      t_func;

  nIndice pls_integer;
begin
  -- Carrega o cursor na pl/sql table
  for rFunc in c_func loop
    nIndice := rFunc.rownum;

    var_func(nIndice).codigo := rFunc.codigo;
    var_func(nIndice).nome   := rFunc.nome;
    var_func(nIndice).cargo  := rFunc.cargo;
  end loop;
  .
  .
  .
  -- aqui você pode fazer o loop a partir de qualquer registro
  for nIndice in 1..var_func.count loop
    ..
  end loop;
  .
  .
  .
  for nIndice in 150..var_func.count loop
    ..
  end loop;
end;
/
Espero que ajude.

Abs.
CESAR_CARVALHO
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qui, 29 Jun 2006 3:03 pm
Localização: MARINGA-PR
Cesar Luis de Carvalho
Maringá-PR

Fabrio, tua dica foi muito valiosa. Obrigado. É o que preciso.
Trevisolli, valeu pela dica. Como você disse, na minha situação, a solução do Fabrício se encaixa na minha lógica.
Abraços,
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante