datos no filtrados en un procedimiento almacenado
Publicado por Alex (2 intervenciones) el 19/10/2005 00:18:35
Hola, tengo un problema que para mi es ilógico. Estoy ejecutando un procedimiento almacenado en oracle que retorna registros, además el procedimiento almacenado recibe como parametro una fecha que debe filtrar los datos devueltos al ejecutar el procedimiento almacenado, el problema esta ahí que no filtra datos, devuele todo el conjunto de registros de la tabla.
Aquí esta el código del proc almacenado: note q recibe como parametro de entrada un valor tipo fecha
CREATE OR REPLACE PROCEDURE Datositem (fecha DATE,c_item OUT Indemnizaciones.ReservasPendientesROW)
IS
BEGIN
OPEN c_item FOR SELECT i.ID,
TO_NUMBER(TO_CHAR(REPLACE(DECODE(SUBSTR(dir.gpsx,1,1),'.',SUBSTR(dir.gpsx,2),',',SUBSTR(dir.gpsx,2),dir.gpsx),',','.')),'9999999999.00') x,
TO_NUMBER(TO_CHAR(REPLACE(DECODE(SUBSTR(dir.gpsy,1,1),'.',SUBSTR(dir.gpsy,2),',',SUBSTR(dir.gpsy,2),dir.gpsy),',','.')),'9999999999.00') y
FROM TRATADO tr,CONTRATOREASEGURO cr,REPARTOCONTRATOITEMS rc, ENDOSOITEMGRUPOCOBERTURA eg,
ENDOSOITEM ei, ENDOSO e, POLIZA p, ENDOSOESTADO et, DOCUMENTO d, ASIENTO a,
PREDIO pre, ITEM i, DIRECCION dir, ENTIDAD ent, CLIENTE cli, MATERIALCONSTRUCCION matc,
TIPOPREDIO tpre, TIPOPREDIOGENERAL tpreg, CLASEPOLIZA cp
WHERE cr.tratadoid = tr.ID
AND tpreg.ID = tpre.tipoprediogeneralid
AND rc.contratoreaseguroid = cr.ID
AND eg.ID = rc.endosoitemgrupocoberturaid
AND ei.ID = eg.endosoitemid
AND e.ID = ei.endosoid
AND p.ID = e.polizaid
AND P.clasePolizaId = cp.id
AND rc.ultimo = 'S'
AND e.ID = et.endosoid
AND et.esactual = '1'
AND d.ID = et.facturaid
AND a.claseid = d.ID
AND et.estadoid = '13'
AND TRUNC(e.vigenciaDesde) <= fecha--ojo esta línea
AND TRUNC(e.vigenciaHasta) >= fecha--ojo esta línea
AND i.ID = ei.itemid
AND pre.ID = i.ID
AND e.sucursalid = '87'
AND dir.ID = pre.direccionid
AND ent.ID = cli.entidadid
AND e.clienteid = cli.ID
AND matc.ID = pre.materialconstruccionid
AND tpre.ID = pre.tipopredioid
AND p.tipoContenedor = '1'
AND (dir.gpsx IS NOT NULL AND dir.gpsy IS NOT NULL)
AND (NVL(dir.gpsx,'0') NOT IN ('.','0') AND NVL(dir.gpsy,'0') NOT IN ('.','0'))
AND dir.gpsx <> dir.gpsy
--and tpre.id = '2847277056'
GROUP BY
i.ID,
dir.gpsx,
dir.gpsy;
END;
Aqui esta el código VBN que ejecuta el proc:
cn.Open()
Dim cmd As New OracleCommand(nombreprocedimiento, cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("fecha", OracleType.DateTime).Value = fecha
cmd.Parameters.Add("c_item", OracleType.Cursor).Direction = ParameterDirection.Output
Dim da As OracleDataReader = cmd.ExecuteReader
Datagrid.DataSource = da
Datagrid.DataBind()
Nota: fecha es una variable tipo date de VBN y nombreprocedimiento es tipo string
Aquí esta el código del proc almacenado: note q recibe como parametro de entrada un valor tipo fecha
CREATE OR REPLACE PROCEDURE Datositem (fecha DATE,c_item OUT Indemnizaciones.ReservasPendientesROW)
IS
BEGIN
OPEN c_item FOR SELECT i.ID,
TO_NUMBER(TO_CHAR(REPLACE(DECODE(SUBSTR(dir.gpsx,1,1),'.',SUBSTR(dir.gpsx,2),',',SUBSTR(dir.gpsx,2),dir.gpsx),',','.')),'9999999999.00') x,
TO_NUMBER(TO_CHAR(REPLACE(DECODE(SUBSTR(dir.gpsy,1,1),'.',SUBSTR(dir.gpsy,2),',',SUBSTR(dir.gpsy,2),dir.gpsy),',','.')),'9999999999.00') y
FROM TRATADO tr,CONTRATOREASEGURO cr,REPARTOCONTRATOITEMS rc, ENDOSOITEMGRUPOCOBERTURA eg,
ENDOSOITEM ei, ENDOSO e, POLIZA p, ENDOSOESTADO et, DOCUMENTO d, ASIENTO a,
PREDIO pre, ITEM i, DIRECCION dir, ENTIDAD ent, CLIENTE cli, MATERIALCONSTRUCCION matc,
TIPOPREDIO tpre, TIPOPREDIOGENERAL tpreg, CLASEPOLIZA cp
WHERE cr.tratadoid = tr.ID
AND tpreg.ID = tpre.tipoprediogeneralid
AND rc.contratoreaseguroid = cr.ID
AND eg.ID = rc.endosoitemgrupocoberturaid
AND ei.ID = eg.endosoitemid
AND e.ID = ei.endosoid
AND p.ID = e.polizaid
AND P.clasePolizaId = cp.id
AND rc.ultimo = 'S'
AND e.ID = et.endosoid
AND et.esactual = '1'
AND d.ID = et.facturaid
AND a.claseid = d.ID
AND et.estadoid = '13'
AND TRUNC(e.vigenciaDesde) <= fecha--ojo esta línea
AND TRUNC(e.vigenciaHasta) >= fecha--ojo esta línea
AND i.ID = ei.itemid
AND pre.ID = i.ID
AND e.sucursalid = '87'
AND dir.ID = pre.direccionid
AND ent.ID = cli.entidadid
AND e.clienteid = cli.ID
AND matc.ID = pre.materialconstruccionid
AND tpre.ID = pre.tipopredioid
AND p.tipoContenedor = '1'
AND (dir.gpsx IS NOT NULL AND dir.gpsy IS NOT NULL)
AND (NVL(dir.gpsx,'0') NOT IN ('.','0') AND NVL(dir.gpsy,'0') NOT IN ('.','0'))
AND dir.gpsx <> dir.gpsy
--and tpre.id = '2847277056'
GROUP BY
i.ID,
dir.gpsx,
dir.gpsy;
END;
Aqui esta el código VBN que ejecuta el proc:
cn.Open()
Dim cmd As New OracleCommand(nombreprocedimiento, cn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("fecha", OracleType.DateTime).Value = fecha
cmd.Parameters.Add("c_item", OracleType.Cursor).Direction = ParameterDirection.Output
Dim da As OracleDataReader = cmd.ExecuteReader
Datagrid.DataSource = da
Datagrid.DataBind()
Nota: fecha es una variable tipo date de VBN y nombreprocedimiento es tipo string
Valora esta pregunta


0