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