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...
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;
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...
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.