Oracle Dynamic SQL Open游标日期参数为十进制

时间:2014-10-15 14:56:27

标签: sql oracle date cursor dynamic-sql

我有以下存储过程:

create or replace PROCEDURE MP9_INFORME_MUESTREOS_CABECERA
  (pPlanta IN VARCHAR2,
  pLinea IN VARCHAR2,
  pfechaini IN DATE,
  pfechafin IN DATE,
  cInformeMuestreosCabecera OUT SYS_REFCURSOR)
AS
BEGIN        

OPEN cInformeMuestreosCabecera FOR

  'Select DISTINCT   
    mod_cav.id AS ID_SECCION,
    cav_mol.id AS ID_MOLDE,
    mod_lin.modelo AS MODELO,
    cav.order_fenix AS ORDEN,
    mod_cav.seccion AS SECCION, 
    cav.cavidad AS CAVIDAD,
    cav_mol.molde AS MOLDE,
    cav_mol.cavidad AS cav_mol,
    mod_lin.fecha_on AS FECHA_INICIO,
    mod_lin.fecha_off AS FECHA_FIN
  FROM
    '||pLinea||'.cnf_mod_lin mod_lin
  INNER JOIN 
    '||pLinea||'.cnf_mod_cav mod_cav 
      ON (mod_lin.fecha_on = mod_cav.fecha_on AND mod_lin.fecha_off = mod_cav.fecha_off)
  INNER JOIN 
    '||pPlanta||'.cod_cavidad cav 
      ON cav.ngotas IN (Select distinct maq_is.gotas FROM '||pLinea||'.cnf_maq_is maq_is)
 INNER JOIN 
    '||pLinea||'.cnf_cav_mol cav_mol 
      ON (mod_lin.fecha_on = cav_mol.fecha_on AND mod_lin.fecha_off = cav_mol.fecha_off 
      AND
        cav_mol.cavidad = to_char(mod_cav.seccion) ||cav.cavidad )

  WHERE
    cav_mol.status = TO_NUMBER(2)
    AND
    mod_lin.fecha_on < TO_DATE('||TO_CHAR(pfechafin)||')
    AND
    (mod_lin.fecha_off is NULL OR mod_lin.fecha_off >= TO_DATE('||TO_CHAR(pfechaini)||'))

  ORDER BY 
    mod_cav.seccion,
    cav.order_fenix';

END MP9_INFORME_MUESTREOS_CABECERA;

我有错误:

  

ORA-01858

我将程序更改为直接选择&#34; pfechaini&#34;日期参数。结果是&#34; 0.05十进制值&#34;。我不知道错误在哪里。

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

OPEN cInformeMuestreosCabecera FOR
  'Select ...
  WHERE ...
    mod_lin.fecha_on < :p1
    AND
    (mod_lin.fecha_off is NULL OR mod_lin.fecha_off >= :p2)
  ORDER BY ...'
USING pfechafin, pfechaini;