Estouro no número de cursores abertos.

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
marcelo9i
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 20
Registrado em: Ter, 25 Out 2005 3:10 pm
Localização: RJ
Marcello Rodrigo

Estou tendo um problema e já descobri que quando o número de cursores abertos excedem ao limite do Oracle o report sai por erro.
Toda vez que vou chamar o Report pelo forms eu faço um tratamento dos cursores e dou um shutdown no Forms em caso de perceber que vai exceder.. mas isso faz com que ele não imprima o relatório em questão fazendo um salto.
Existe alguma forma de tratar estes cursores...

Exemplo:

No forms..

Selecionar tudo

     SELECT VALUE into nLimCursor
     FROM v$parameter
     WHERE NAME = 'open_cursors';

       SELECT COUNT('X')  into nContCursor
     FROM   V$OPEN_CURSOR
     WHERE  USER_NAME = USER;

      IF nContCursor > nLimCursor  THEN
         Add_parameter(pl_id,'ORACLE_SHUTDOWN',                   
                                        TEXT_PARAMETER, 'Yes');
                                       MSGBOX('ShutDOWN',' ', ' ');
      END IF;
Em seguida uso o RUNPRODUCTS chamando o Report.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Creio que essa não seja a melhor saída. Veja só: Digamos que o usuário precisa imprimir esse relatório. Se tiver muito cursor aberto, ele não vai conseguir. OU vai ter que ficar tentando...

Acho que o DBA deveria simplesmente aumentar o número de cursores aberto e pronto...
marcelo9i
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 20
Registrado em: Ter, 25 Out 2005 3:10 pm
Localização: RJ
Marcello Rodrigo

Eu na verdade não coloquei exatamente como ele faz.
Ele verifica o limite de cursor permitido e deduz 100 para segurança...
E verifica.. se passou do novo limite (limite do banco - 100) então dá shutdown.. pois se não der shutdown ocorre erro.

Mas a questão é que a impressão que foi comandada por este shutdown não é feita. Não manda nada para impressora.

E eu tenho um LOOP lendo várias faturas do bloco do forms e chamo o Report para cada fatura.. quando o cara tem muitas faturas, ele entra e executa o shutdown e aí esta fatura não é emitida...

acabei testando... e coloquei um shutdown para todas as chamas e funcionou.. mas qual a explicação? e outra coisa, da forma que estava, se eu optasse por gerar em PDF, mesmo com o shutdown ele gera o arquivo.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes