X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [64.117.224.130]) by svr1.postgresql.org (Postfix) with ESMTP id 77631D1B500 for ; Fri, 12 Sep 2003 02:57:25 +0000 (GMT) Received: from svr1.postgresql.org ([64.117.224.193]) by localhost (neptune.hub.org [64.117.224.130]) (amavisd-new, port 10024) with ESMTP id 74121-06 for ; Thu, 11 Sep 2003 23:57:18 -0300 (ADT) Received: from server146.hostingrevolution.com (server146.hostingrevolution.com [64.21.143.245]) by svr1.postgresql.org (Postfix) with ESMTP id 8D2A1D1B4E6 for ; Thu, 11 Sep 2003 23:57:14 -0300 (ADT) Received: from 223.a.002.pth.iprimus.net.au ([210.50.108.223] helo=athlon2000) by server146.hostingrevolution.com with smtp (Exim 4.22) id 19xe7b-00089J-C3; Thu, 11 Sep 2003 21:56:58 -0500 Message-ID: <001d01c378d9$d8a8bfc0$df6c32d2@athlon2000> From: "Richard Sydney-Smith" To: "Stephan Szabo" Cc: References: <20030911194512.Q47864-100000@megazone.bigpanda.com> Subject: Re: How do I replace select ... into commands? Date: Fri, 12 Sep 2003 10:59:08 +0800 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server146.hostingrevolution.com X-AntiAbuse: Original Domain - postgresql.org X-AntiAbuse: Originator/Caller UID/GID - [0 0] / [47 12] X-AntiAbuse: Sender Address Domain - ibisaustralia.com X-Virus-Scanned: by amavisd-new at postgresql.org X-Archive-Number: 200309/91 X-Sequence-Number: 15069 Stephen replied : > Something like the above should work, what's the exact function and error > message and what version are you using? > > thanks Stephen. Exact function definition follows: PG Version is 7.3.1 on Windows 2000 This procedure allocates unique record number to a number of tables. In the application it is important that I know the records ID number before it is inserted into the database. Also use to assign batch and session numbers etc. CREATE FUNCTION public.make_rsn(bpchar, bpchar, int4) RETURNS int4 AS ' declare tbl alias for $1; seq_fld alias for $2; incr alias for $3; rsn integer := 0; lastrsn integer := 0; mx integer := 0; begin -- look for existing last RSN select "max"(seq_val) as m into lastrsn from fseqkeys where seq_key = tbl; if lastrsn=0 or lastrsn is null then -- no pre existing RSN so we have to search the table if tbl=''BATCH'' or position(''-'' in tbl)>0 then mx := 100; else execute ''select max('' || seq_fld || '') into mx from '' || tbl; end if; rsn := mx+1; -- dont allow rsn < 100 if rsn<100 or rsn is null then rsn := 100; end if; lastrsn := rsn; -- record the new rsn insert into fseqkeys (seq_key,seq_val) values (tbl,rsn); end if; -- reserve the required number of rows rsn := lastrsn+incr; --and update the fseqkeys table with the RSN number/s we have just used update fseqkeys set seq_val = rsn where seq_key=tbl; -- now return the RSN number to the user return rsn; end; ' LANGUAGE 'plpgsql' VOLATILE; ----- Original Message ----- From: "Stephan Szabo" To: "Richard Sydney-Smith" Cc: Sent: Friday, September 12, 2003 10:46 AM Subject: Re: [SQL] How do I replace select ... into commands? > On Fri, 12 Sep 2003, Richard Sydney-Smith wrote: > > > I have a number of sybase procedures in which I use something like > > > > declare > > mx : integer; > > begin > > select max(field) from table into mx; > > return mx; > > end; > > > > Postgresql is telling me that select...into has not been implemented > > yet. what is the best way to perform this action with the commands > > offered in plpgsql? > > Something like the above should work, what's the exact function and error > message and what version are you using? > > >