Skip to content
Advertisement

Using update inside of PL/pgSQL

To begin with, I am a newbie to SQL and PostgreSQL. It might be a silly beginner’s mistake.

create or replace function temporary_function_for_getting(admission_number_text text,organization_id bigint,user_object_json json)
returns table(admission_number  text ,status text)
LANGUAGE plpgsql
    AS $function$
declare
    select_user_with_id text := 
                          'select $1 as admin,
                            case 
                                when $2 is null then ''Invalid organization ID''
                                when $1 is null then ''Invalid admission number''
                                when exists (update hsg_id_master set hsg_suffix=''something new'' where admission_number=$1 and organization_id=$2 returning hsg_suffix )
                                  then ''success''
                                else ''User does not exists.''
                            end;';
    begin 
    return query
    execute select_user_with_id using admission_number_text,organization_id;
     
end;
$function$ ;

^This isn’t working provides me with an error

SQL Error [42601]: ERROR: syntax error at or near “update”
Where: PL/pgSQL function temporary_function_for_getting(text,bigint,json) line 13 at RETURN QUERY .

The update query works fine by itself not sure what i am doing wrong. Would appreciate if anyone could point me to the resource and/or a better way of doing the same process .

Advertisement

Answer

You seem to want an update CTE for the base query. Try something like this:

with u as (
      update hsg_id_master
          set hsg_suffix = ''something new''
           where admission_number = $1 and organization_id = $2 
           returning hsg_suffix 
     )
select $1 as admin,
       (case when $2 is null then ''Invalid organization ID''
             when $1 is null then ''Invalid admission number''
             when exists (select 1 from u)
             then ''success''
             else ''User does not exists.''
        end);

Note that the update will not update any rows if either $1 or $2 is NULL, because the where clause will evaluate to NULL — filtering out all rows.

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement