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...
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


0