PDA

Ver la Versión Completa : row_count erroneo en INSERT


boreg
16-04-2008, 02:20:50
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:

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.

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