From: | Bryan Klimt <Bryan_Klimt(at)baylor(dot)edu> |
---|---|
To: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: insert rowtype |
Date: | 2003-05-08 16:41:04 |
Message-ID: | DBDAE5D0-8173-11D7-B60D-000A95774E48@baylor.edu |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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
From | Date | Subject | |
---|---|---|---|
Next Message | SZŰCS Gábor | 2003-05-08 16:41:35 | Re: "too clever" when creating SQL functions |
Previous Message | scott.marlowe | 2003-05-08 16:20:19 | Re: [PERFORM] [SQL] Unanswered Questions WAS: An unresolved performance |