Ver Mensaje Individual
  #1  
Antiguo 16-04-2008
Avatar de boreg
boreg boreg is offline
Miembro
 
Registrado: oct 2007
Ubicación: México, México
Posts: 76
Reputación: 17
boreg Va por buen camino
row_count erroneo en INSERT

Saludos a todos y gracias por su atencion, utilizo firebird 2.0.1 y hace unos dias tuve un "error", por llamarlo de alguna manera, al validar ROW_COUNT despues de un script de Insercion. El problema era que a pesar de que no se insertaban datos (lo comprobe ejecutando unicamente desde el SELECT) el ROW_COUNT me devolvia 4, note que al retirar el left join a una vista (ver sentencia SQL) el problema quedaba solucionado. Pero me quede con la duda de porque pasa esto y es por eso que pregunto si a alguien le ha sucedido algo parecido.
La sentencia que devolia tal resultado era algo asi como la siguiente:
Código SQL [-]
  INSERT INTO TABLA1
    (Campo1, Campo2, ...Campo10)
  SELECT FIRST 1 Campo1, Campo2, ...Campo10
  FROM TABLA2 P
  INNER JOIN TABLA3 D
  ON P.ID = D.ID_P
  INNER JOIN TABLA4 U
  ON D.ID_U = U.ID
  LEFT JOIN TABLA5 I
  ON P.ID_I = I.ID
  LEFT JOIN
  (
    SELECT ID_P, MIN(CAMPO)  AS CAD
    FROM VISTA
    WHERE UNIDADES > 0
    GROUP BY ID_P
  ) VW
  ON P.ID = VW.ID_P
  INNER JOIN TABLA6 M
  ON M.TIPO = :TIPO
  AND M.FOLIO = :FOLIO
  AND M.TURNO = :TURNO
  AND M.STATUS = 'CA'
  LEFT JOIN STORED_PROC(M.TIPO, M.CTE, M.PROV, P.ID, U.ID) C
  ON C.ESP IS NOT NULL
  WHERE P.ID = :ID_P
  AND D.FACTOR > 0
  AND D.PRECIO > 0
  ORDER BY D.FACTOR, D.ID_U;

  INSERTADOS = ROW_COUNT;
y les comento que mientras redactaba este hilo, me acabo de encontrar con algo que no se si sea curioso pero me saca mas dudas, si muevo de posicion el left join a la VISTA , pues resulta que me arroja el dato correcto(ROW_COUNT = 0) y segun cambie de lugar la VISTA me devuelve diferentes valores erroneos. Este es el script que me devuelve el dato correcto, igual si pongo la vista despues del SP me da el dato correcto.
Código SQL [-]
  INSERT INTO TABLA1
    (Campo1, Campo2, ...Campo10)
  SELECT FIRST 1 Campo1, Campo2, ...Campo10
  FROM TABLA2 P
  INNER JOIN TABLA3 D
  ON P.ID = D.ID_P
  INNER JOIN TABLA4 U
  ON D.ID_U = U.ID
  LEFT JOIN TABLA5 I
  ON P.ID_I = I.ID
  INNER JOIN TABLA6 M
  ON M.TIPO = :TIPO
  AND M.FOLIO = :FOLIO
  AND M.TURNO = :TURNO
  AND M.STATUS = 'CA'
  LEFT JOIN
  (
    SELECT ID_P, MIN(CAMPO)  AS CAD
    FROM VISTA
    WHERE UNIDADES > 0
    GROUP BY ID_P
  ) VW
  ON P.ID = VW.ID_P
  LEFT JOIN STORED_PROC(M.TIPO, M.CTE, M.PROV, P.ID, U.ID) C
  ON C.ESP IS NOT NULL
  WHERE P.ID = :ID_P
  AND D.FACTOR > 0
  AND D.PRECIO > 0
  ORDER BY D.FACTOR, D.ID_U;

  INSERTADOS = ROW_COUNT;
alguien me puede dar alguna informacion al respecto de esto?, esta mal, o no es sana, la secuencia que llevo con los joins(inner, inner, left, left, inner left)? cabe aclarar que el SP no hace ninguna actualizacion ni insercion de datos solo es una consulta que ademas solo devuelve 1 solo registro.

De antemano muchas gracias y espero sus comentarios o sugerencias.

Última edición por boreg fecha: 16-04-2008 a las 23:41:14.
Responder Con Cita