Skip to content
Advertisement

User function return query and insert into

I trying to make function, that merge where select query return result as value(not table) and insert into that use value from select statement.
The function where argument gets from user, and this argument provide into select query on table_foo that return value id where I try set and use in insert into to diff table(table_bar). So I little bit confused. Here sample of code:

create or replace function my_func(taskID integer)
 returns integer
 language plpgsql
as $function$
declare jobID int;
    begin
        return query (
                      select id
                      from table_foo
                       where task_id = taskID 
                      ); --that must return values such as id that i need 
         set jobID = id --trying set previosly returned value to new to use it in next statement: 
        insert into table_bar (job_id)
                    values (jobID);
    end;
$function$
;

Advertisement

Answer

No need for plpgsql and no need for two queries either. Combine the INSERT and SELECT, and use RETURNING.

CREATE OR REPLACE FUNCTION my_func(taskID INTEGER)
RETURNS INTEGER
LANGUAGE SQL
AS
$$
    INSERT INTO table_bar(job_id)
    SELECT  id
    FROM    table_foo
    WHERE   task_id = taskID
    RETURNING id;
$$;
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement