1 votos

Obtener dinámicamente el valor de una columna usando plpgsql

Creo una función que devuelve el valor de un campo cuando se da el id :

CREATE OR REPLACE FUNCTION get_dcteam(id int) RETURNS text
AS $$
#print_strict_params on
DECLARE
dc_team text;
BEGIN
    SELECT monitoring_table.dc_team INTO STRICT dc_team
        FROM monitoring_table WHERE monitoring_table.id = get_dcteam.id;
    RETURN dc_team;
END
$$ LANGUAGE plpgsql;

Yo lo llamo así:

select * from get_dcteam((select id from monitoring_table where id=30))

Lo que quiero hacer es llamar a la función dinámicamente. No quiero precisar un id conocido.
¿Cómo puedo hacerlo?

0voto

jlehenbauer Puntos 7749

Nunca lo llames así. Porque devuelve un único valor ( RETURNS text ) Llámalo así en su lugar, es más limpio.

SELECT id, get_dcteam(id)
FROM monitoring_table
WHERE id = 30;

Ahora si lo quieres para más id's quita la cláusula WHERE.

SELECT id, get_dcteam(id)
FROM monitoring_table;

Además, probablemente deberías reescribir eso para usar SQL regular, ya que puede ser inline.

CREATE OR REPLACE FUNCTION get_dcteam(id int)
RETURNS text
AS $$
    SELECT monitoring_table.dc_team
    FROM monitoring_table
    WHERE monitoring_table.id = get_dcteam.id;
$$ LANGUAGE sql
IMMUTABLE;

Pero un paso más allá, yo eliminaría la función por completo. Es SQL básico y sólo te va a retrasar. Mira lo que estás haciendo: get_dcteam está consultando monitoring_table y lo estás llamando en una consulta que ya está visitando esa tabla. Esto será mucho más rápido y claro:

SELECT id, dc_team
FROM monitoring_table
WHERE id = 30;

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X