PostgreSQL - Consulta Select Postgresql con la referencia del campo almacenado en una variable.

 
Vista:
Imágen de perfil de Gregory
Val: 6
Ha disminuido 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Consulta Select Postgresql con la referencia del campo almacenado en una variable.

Publicado por Gregory (1 intervención) el 09/08/2019 20:12:48
Buenas tardes a todos,
necesito realizar una consulta de selección en una función de postgresql donde le pueda pasar la referencia del campo en una variable.

Por ejemplo:

CREATE OR REPLACE FUNCTION sch_averias.sp_actualiza_tb_averias_epi_resumido(fecha timestamp without time zone, campo_de_agrupacion text)

RETURNS table (id_agrupacion integer, fecha_de_cierre timestamp without time zone, tecnica_instalada integer, reportes_iniciales integer,

reportes_diarios integer, reportes_totales integer, repetidos_10_dias integer, "%_epi" float) AS

$BODY$

DECLARE columna_agrupacion_tb_inventario_detallado TEXT;

DECLARE columna_agrupacion_tb_averias_historico TEXT;

BEGIN

columna_agrupacion_tb_inventario_detallado = 'sch_inventario.tb_inventario_detallado.'||

(SELECT column_name FROM information_schema.columns

WHERE table_schema = 'sch_inventario'

AND table_name = 'tb_inventario_detallado'

AND column_name = $2);

columna_agrupacion_tb_averias_historico = 'sch_averias.tb_averias_historico.'||

(SELECT column_name FROM information_schema.columns

WHERE table_schema = 'sch_averias'

AND table_name = 'tb_averias_historico'

AND column_name = $2);


CREATE TEMPORARY TABLE temp_sch_inventario_tecnica_instalada_resumen_por_agrupacion (id_agrupacion integer, TI integer, id_reg integer);

INSERT INTO temp_sch_inventario_tecnica_instalada_resumen_por_agrupacion (id_agrupacion, TI, id_reg)

SELECT columna_agrupacion_tb_inventario_detallado, tb_inventario_detallado.id_region, count(tb_inventario_detallado.identificativo) AS tecnica_instalada

FROM sch_inventario.tb_inventario_detallado i

GROUP BY tb_inventario_detallado.id_region, columna_agrupacion_tb_inventario_detallado

ORDER BY tb_inventario_detallado.id_region, (count(tb_inventario_detallado.identificativo)), $2;

RAISE NOTICE 'LA TABLA TEMPORAL temp_sch_inventario_tecnica_instalada_resumen_por_agrupacion HA SIDO LLENADA %', columna_agrupacion_tb_inventario_detallado;

...

Me da el error siguiente:

ERROR: missing FROM-clause entry for table "tb_inventario_detallado"
LINE 3: ...ELECT columna_agrupacion_tb_inventario_detallado, tb_inventa...
^
QUERY: INSERT INTO temp_sch_inventario_tecnica_instalada_resumen_por_agrupacion (id_agrupacion, TI, id_reg)

SELECT columna_agrupacion_tb_inventario_detallado, tb_inventario_detallado.id_region, count(tb_inventario_detallado.identificativo) AS tecnica_instalada

FROM sch_inventario.tb_inventario_detallado i

GROUP BY tb_inventario_detallado.id_region, columna_agrupacion_tb_inventario_detallado

ORDER BY tb_inventario_detallado.id_region, (count(tb_inventario_detallado.identificativo)), columna_agrupacion_tb_inventario_detallado
CONTEXT: PL/pgSQL function sch_averias.sp_actualiza_tb_averias_epi_resumido(timestamp without time zone,text) line 52 at SQL statement

********** Error **********

ERROR: missing FROM-clause entry for table "tb_inventario_detallado"
SQL state: 42P01
Context: PL/pgSQL function sch_averias.sp_actualiza_tb_averias_epi_resumido(timestamp without time zone,text) line 52 at SQL statement

Si alguien me puede ayudar con esto le agradezco por adelantado...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco
Val: 256
Oro
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Consulta Select Postgresql con la referencia del campo almacenado en una variable.

Publicado por Francisco (110 intervenciones) el 13/08/2019 03:48:23
Hola

pues usa RAISE NOTICE inmediatamente despues de asignar a las variables para depurar que es lo que pasa con la sentencia

1
2
RAISE NOTICE '%', columna_agrupacion_tb_inventario_detallado;
RAISE NOTCIE '%', columna_agrupacion_tb_averias_historico;

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar