Thiago, with the mask does not work when I put in a variable. See the procedure below the first line of the WHERE.
Select all
CREATE OR REPLACE PROCEDURE sp_tempos_elevados (cv_1 IN OUT SYS_REFCURSOR,
HIERARQUIA IN VARCHAR2,
mês_ANO IN VARCHAR2 ,
HORAS IN INT,
ORDENACAO INT)
IS
SQUERY VARCHAR(30000);
BEGIN
SQUERY:=
'SELECT h.cod_hierarq AS codLocal,
Round((i.qtd_cons_ating+i.qtd_cons_rur_ating+i.qtd_cons_prim_atingi)*i.min_duracao,0) AS INDEXADOR,
i.num_id_interrupcao,
i.num_documento,
(f.dat_inicio) AS dat_inicio,
(i.dat_termino)AS dat_termino,
Trunc(((i.min_duracao/60)/24),0) AS dia_duracao,
Trunc(i.min_duracao/60,0) AS hor_duracao,
Round(i.min_duracao,0) AS min_duracao,
i.qtd_cons_rur_ating AS ConsRural,
i.qtd_cons_prim_atingi AS ConsPri,
i.qtd_cons_ating AS ConsUrbano
FROM tinter_intertrecho f, titensinter i, thierarquia h, ttransferenciaconint t,
(SELECT l.COD_LOCAL,s.COD_LOCAL AS super,r.COD_LOCAL AS reg FROM tOrdemHierarquia s
inner join tOrdemHierarquia r ON (s.COD_LOCAL=r.NUM_ID_PAI)
inner join tOrdemHierarquia l ON (r.COD_LOCAL=l.NUM_ID_PAI)
WHERE s.COD_LOCAL=NVL2('|| HIERARQUIA||',(SELECT DISTINCT num_id_hierarquia FROM thierarquia WHERE cod_Hierarq=CAST(' || HIERARQUIA ||' AS INT)),s.COD_LOCAL)
UNION
SELECT l.COD_LOCAL,s.COD_LOCAL AS super, r.COD_LOCAL AS reg FROM tOrdemHierarquia s
inner join tOrdemHierarquia r ON (s.COD_LOCAL=r.NUM_ID_PAI)
inner join tOrdemHierarquia l ON (r.COD_LOCAL=l.NUM_ID_PAI)
WHERE r.COD_LOCAL=NVL2('|| HIERARQUIA||',(SELECT DISTINCT num_id_hierarquia FROM thierarquia WHERE cod_Hierarq=CAST('|| HIERARQUIA||' AS INT)),r.COD_LOCAL)
UNION
SELECT l.COD_LOCAL, s.COD_LOCAL AS super, r.COD_LOCAL AS reg FROM tOrdemHierarquia s
inner join tOrdemHierarquia r ON (s.COD_LOCAL=r.NUM_ID_PAI)
inner join tOrdemHierarquia l ON (r.COD_LOCAL=l.NUM_ID_PAI)
WHERE l.COD_LOCAL=NVL2('|| HIERARQUIA||',(SELECT DISTINCT num_id_hierarquia FROM thierarquia WHERE cod_Hierarq=CAST('|| HIERARQUIA||' AS INT)),l.COD_LOCAL)
)l
WHERE TO_DATE(f.dat_inicio,' || 'mm/yyyy'||') = '||mês_ANO||'
AND (i.min_duracao-Nvl(t.min_duracao,0)) >' || HORAS || ' * 60
AND f.num_id_interrupcao = i.num_id_interrupcao
AND i.num_id_hierarquia = h.num_id_hierarquia
AND h.num_id_hierarquia = l.cod_local
AND i.num_id_interrupcao = t.num_id_interrupcao(+)
AND i.num_id_item = t.num_id_item(+)';
OPEN cv_1 FOR SQUERY;
END;
/
When I try to execute it, an error is returned, informing me that the 'YYYY' identifier is invalid. This identifier is what is on the first line of the WHERE.
to_date (f.dat_inicio, '||' mm / yyyy '||') = '|| mês_ano ||'
The question is: How do I concatenate the mask in this case using to_date? I'vê tried everything and I could not.
I need the query in a variable, as this query will be dynamic and pieces will be included according to the selected option by the user.
From now on, thank you.