Re: insert rowtype - Mailing list pgsql-sql

From Bryan Klimt
Subject Re: insert rowtype
Date
Msg-id DBDAE5D0-8173-11D7-B60D-000A95774E48@baylor.edu
Whole thread Raw
In response to insert rowtype  (Bryan Klimt <Bryan_Klimt@baylor.edu>)
List pgsql-sql
So, to answer my own question...

I wanted to duplicate a row, but change a few data items in it.
Here is an example table to demonstrate:

# select oid,* from test;
  oid  | id |       tmstamp       | description
-------+----+---------------------+------------- 20396 |  1 | 0000-00-00-00-00-00 | hello 20397 |  2 |
0000-00-00-00-00-00| goodbye 20398 |  2 | 0000-00-00-00-00-01 | goodbye
 

I wanted to create a new row like this:
  oid  | id |       tmstamp       | description
-------+----+---------------------+------------- 20396 |  1 | 0000-00-00-00-00-00 | hello 20397 |  2 |
0000-00-00-00-00-00| goodbye 20398 |  2 | 0000-00-00-00-00-01 | goodbye 20415 |  2 | 1111-00-00-00-00-02 | goodbye
 

But with my real table there are like 50 columns, and i didn't want to 
retype all their names.
So, I created this function:

create or replace function updatetest(integer,varchar(32)) returns 
integer as'declare    -- the oid of the new row    newoid integer;begin    -- duplicate the row    insert into test
  select * from test t where            t.tmstamp=(                select max(tt.tmstamp) from test tt where tt.id=t.id
          )            and t.id=$1;
 
    -- get the oid of the new duplicate    get diagnostics newoid = result_oid;
    -- update the columns you want to change    update test set tmstamp=$2 where oid=newoid;
    -- return the new oid    return newoid;end;' language plpgsql;

# select updatetest(2,'1111-00-00-00-00-02');
 updatetest
------------      20415

I know it looks kinda obvious but it took me forever to figure it out.
Specifically, "get diagnostics newoid = result_oid;" is not very 
obvious to plpgsql newbies.

-Bryan



pgsql-sql by date:

Previous
From:
Date:
Subject: Re: PROBLEM WITH UPDATE COMMAND
Next
From: "SZŰCS Gábor"
Date:
Subject: Re: "too clever" when creating SQL functions