Re: Error "temporary" is not a known variable. al crear funcion con Select * INTO TEMPORARY tarifa_rs From t

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: mauricio pullabuestan <jmauriciopb(at)yahoo(dot)es>
Cc: Postgres ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Error "temporary" is not a known variable. al crear funcion con Select * INTO TEMPORARY tarifa_rs From t
Date: 2015-09-23 22:00:32
Message-ID: 20150923220032.GA295765@alvherre.pgsql
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

mauricio pullabuestan escribió:
> 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

Hola, el problema es que SELECT INTO en plpgsql no es lo mismo que
SELECT INTO en SQL. En plpgsql, INTO indica almacenar el resultado de
la consulta en una variable, mientras que en SQL indica crear una tabla.
Son dos cosas totalmente diferentes. Creo que deberías poder
solucionar tu problema usando CREATE TEMP TABLE AS en vez de tratar de
usar SELECT INTO.

Lo otro es que en realidad no necesitas una tabla temporal para esto.
Puedes hacer simplemente "RETURN QUERY WITH t AS ..." y te olvidas del
DROP TABLE IF EXISTS.

--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Enrique Escobar 2015-09-24 02:36:05 Borrado de una tabla
Previous Message mauricio pullabuestan 2015-09-23 21:53:45 Error "temporary" is not a known variable. al crear funcion con Select * INTO TEMPORARY tarifa_rs From t