From: | mauricio pullabuestan <jmauriciopb(at)yahoo(dot)es> |
---|---|
To: | Postgres ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Error "temporary" is not a known variable. al crear funcion con Select * INTO TEMPORARY tarifa_rs From t |
Date: | 2015-09-23 21:53:45 |
Message-ID: | 158420043.61722.1443045225293.JavaMail.yahoo@mail.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2015-09-23 22:00:32 | Re: Error "temporary" is not a known variable. al crear funcion con Select * INTO TEMPORARY tarifa_rs From t |
Previous Message | Alvaro Herrera | 2015-09-22 18:04:34 | Re: capturar valores de campos en variables usando consulta espacial |