Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   row_count erroneo en INSERT (https://www.clubdelphi.com/foros/showthread.php?t=55401)

boreg 16-04-2008 02:20:50

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.

boreg 25-04-2008 03:17:51

Sin comentarios
 
Pues sigo sin encontrar informacion al respecto, como sea esta solucionado, pero queda la duda de porque se generan datos erroneos, por si alguien encuentra o sabe algo al respecto aun sigo interesado en saber cual es el error. Saludos a todos.

pvizcay 29-04-2008 02:55:58

si realmente es un error como dices búscalo en el bugtraquer de firebird (se entra por www.firebirdsql.com)

si no lo encuentras crea un reporte de bug con la versión y condicones junto con tu código de ejemplo para reproducirlo.. desde ya toda la comunidad estará agradecida y devolveras algo a cambio de utilizar firebird de forma gratuita.. :)

salu2


La franja horaria es GMT +2. Ahora son las 04:24:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi