Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

problema oracle

Estas en el tema de problema oracle en el foro de Oracle en Foros del Web. Hola atodos los amigos de foros del web: tengo el siguiente problema ORA-00604: se ha producido un error a nivel 1 de SQL recursivo ORA-01000: ...
  #1 (permalink)  
Antiguo 25/07/2012, 08:30
 
Fecha de Ingreso: enero-2011
Mensajes: 74
Antigüedad: 13 años, 10 meses
Puntos: 4
problema oracle

Hola atodos los amigos de foros del web:
tengo el siguiente problema

ORA-00604: se ha producido un error a nivel 1 de SQL recursivo
ORA-01000: número máximo de cursores abiertos excedido
ORA-00604: se ha producido un error a nivel 1 de SQL recursivo
ORA-01000: número máximo de cursores abiertos excedido
ORA-01000: número máximo de cursores abiertos excedido

estos problemas me están surgiendo en mi aplicación java pero son errores oracle
tengo la siguiente duda:
no se si deba cerrar el cursor oracle siguiente o eso es automatico y por eso me este dando problemas cuando uso functions oracle como estas:

igual el error me lo da cuando se procesan grandes cantidades en mi aplicacion o sea se llama muchas veces functions como esta

Código PHP:
FUNCTION CAUSANTES_VIGENTESpRUT_BENEFICIARIO IN NUMBER)
   RETURN  
sqlcur IS            

      cRetorno sqlcur
;

   
BEGIN
      OPEN cRetorno 
FOR
             
SELECT c.per_rut,    -- rut beneficiario
             p
.per_digito,        -- dv beneficiario
             c
.cfa_rut            rutCausante,             -- rut causante
             c
.cfa_digito         dvCausante,              -- dv causante 
             c
.cfa_nombre         nombreCausante,          -- nombre causante
             t
.tcs_tipcau         codigoTipoCausante,      -- cdigo tipo causante      
             decode
(c.tcf_tipo'MATERNAL'21)  codigoBeneficio,  -- codigo beneficio
             c
.cfa_fecnac         fechaNacCausante,        -- fecha nacimiento causante
             c
.cfa_sexo           sexo                     -- sexo causante
      FROM   saf_carga   c
,  
             
afi_persona p,
             
saf_tipparen t
      WHERE  c
.per_rut     pRUT_BENEFICIARIO               -- rut beneficiario
      
AND    p.per_rut     c.per_rut 
      
AND    t.tpr_paren   c.tpr_paren
      
AND    c.cfa_rut<>0
      
AND    c.cfa_rut is not null;      
       
      RETURN 
cRetorno;

   
END CAUSANTES_VIGENTES
gracias de antemano
  #2 (permalink)  
Antiguo 25/07/2012, 09:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: problema oracle

Es posible que se te esten quedando abiertos los cursores que abres.
Fijate que el cierre de los cursores está operando correctamente cada que terminas la operación que requieres.

Esto se da, ya que en oracle existe un parametro llamado OPEN_CURSORS que por defecto está configurado en 50. Si se supera este numero, sale el error que te aparece.

Si crees que los estas cerrando correctamente, podrías aumentar un poco este parametro. Sin embargo, no te lo recomiendo como primera opción, ya que si tienes un problema de cierre de cursores, puedes tener este parámetro bastante grande y esto te va a representar problemas mucho mayores de los que presentas actualmente.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 25/07/2012, 09:19
 
Fecha de Ingreso: enero-2011
Mensajes: 74
Antigüedad: 13 años, 10 meses
Puntos: 4
Respuesta: problema oracle

gracias por la respuesta , pero mi duda es si a nivel de mi function oracle debo hacer un close cursor porque a nivel de mi aplicación java estoy cerrando todos los resultsets y conecciones
existe alguna posibilidad que oracle este dejando abiertos los cursores por no mandarlos a cerrar explicitamente yo ?fijese que no lo hago en el codigo que pongo de ejemplo de una de mis funciones
quedo a las espera de sus comentarios
  #4 (permalink)  
Antiguo 25/07/2012, 10:00
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: problema oracle

Creería que los cursores son cerrados explicitamente.

Lo que puedes hacer es una funcion que reciba un cursor como entrada.
CUando termines de utilizarlo, lo envias desde java y al interior de la función realizar un CLOSE CURSOR.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 25/07/2012, 10:10
 
Fecha de Ingreso: enero-2011
Mensajes: 74
Antigüedad: 13 años, 10 meses
Puntos: 4
Respuesta: problema oracle

pero en mi aplicación lo casteo a resultset y lo cierro al terminar mi duda es si en la function oracle despues de hacer RETURN cRetorno; tendre que hacerle un close cRetorno
gracias por la ayuda
  #6 (permalink)  
Antiguo 25/07/2012, 10:14
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: problema oracle

Si es necesario hacer explicitamente el CLOSE CURSOR.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 26/07/2012, 04:36
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 5 meses
Puntos: 43
Respuesta: problema oracle

EN este caso es posible que si.

Para evitar estas situaciones, es mejor usar los cursores de esta manera :

DECLARE

CURSOR X IS
SELECT ..........

BEGIN


FOR VARIABLE IN CURSOR LOOP

BLA-BLA-BLA.....

END LOOP

Así te evitas esos problemas.

Etiquetas: select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:17.