Buen día 

Necesito crear una función que recibe 2 string con formato json,al compilar me 
da el error "temporary" is not a known variable.
El código es el siguiente:
CREATE OR REPLACE FUNCTION prb.listado_fn(In w_cab_json varchar, In w_det_json 
varchar)RETURNS TABLE (tarea NUMERIC, operacion VARCHAR, observacion VARCHAR, 
centro VARCHAR, proceso VARCHAR, dpto VARCHAR,                seccion VARCHAR, 
articulo VARCHAR, unidad VARCHAR)AS$BODY$ BEGIN
DROP TABLE IF EXISTS tarifa_rs;
With tAS (Select j.tarea, j.operacion, j.observacion, j.ms_oper, j.mo_tasa, 
j.gf_porcentaje, j.gf_tasa,        sum(j.ms_oper) over (PARTITION BY j.tarea) 
as ms_tar,        CASE j.un When 'Uno' Then 1 When 'Cien' Then 100 When 'Mil'  
Then 1000 END :: NUMERIC(4, 0) As factorFrom 
json_populate_recordset(null::prb.tarifa_detalle_type, w_det_json) j)Select 
t.tarea, t.operacion, t.observacion, t.ms_oper, t.mo_tasa, t.gf_porcentaje, 
t.gf_tasa, t.ms_tar,        row_number() Over(PARTITION By t.tarea ORDER BY 
t.operacion desc) As rn,        Round( (((t.mo_tasa /60) * (t.ms_tar / 
t.factor)) + ((((t.mo_tasa /60) * (t.ms_tar / t.factor)) * (t.gf_porcentaje / 
100)) + t.gf_tasa)), 3) As costo_total        INTO TEMPORARY tarifa_rsFrom t;
Update tarifa_rs    Set ms_tar = 0, costo_total = 0  Where tarifa_rs.rn > 1;
RETURN Query Select d.tarea, d.operacion, d.observacion, d.centro, d.proceso, 
c.dpto, c.seccion, c.articulo, c.unidad From tarifa_rs d CROSS JOIN (Select 
*From json_populate_record(null::prb.tarifa_cabecera_type, w_cab_json::json)) 
cORDER BY d.tarea, d.operacion;
DROP TABLE IF EXISTS tarifa_rs;
END;$BODY$  LANGUAGE plpgsql VOLATILE  COST 100  ROWS 1000;
Cuando corro el código sin crear la función, todo funciona bien, crea la tabla 
temporal y me devuelve los resultados que espero, pero si intento hacer la 
funcion tengo el error, si comento  INTO TEMPORARY tarifa_rs compila sin 
problemas
Como puedo corregir el problema para crear la función.Hay alguna diferencia 
importante en el perform o consumo de recursos al hacer unRETURNS TABLE (tarea 
NUMERIC, operacion VARCHAR, observacion VARCHAR) en lugar de dimencionar los 
camposRETURNS TABLE (tarea NUMERIC(12,2), operacion VARCHAR(6), observacion 
VARCHAR(100))

Saludos.Mauricio

Responder a