X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (av.hub.org [200.46.204.144]) by postgresql.org (Postfix) with ESMTP id 8F9229DC833 for ; Thu, 29 Dec 2005 14:21:28 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 73804-01 for ; Thu, 29 Dec 2005 14:21:25 -0400 (AST) X-Greylist: from auto-whitelisted by SQLgrey- Received: from tigger.fuhr.org (tigger.fuhr.org [63.214.45.158]) by postgresql.org (Postfix) with ESMTP id F1DA69DC827 for ; Thu, 29 Dec 2005 14:21:23 -0400 (AST) Received: from winnie.fuhr.org (winnie.fuhr.org [10.1.0.1]) by tigger.fuhr.org (8.13.3/8.13.3) with ESMTP id jBTILL5T008265 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 29 Dec 2005 11:21:23 -0700 (MST) (envelope-from mfuhr@winnie.fuhr.org) Received: from winnie.fuhr.org (localhost [127.0.0.1]) by winnie.fuhr.org (8.13.4/8.13.4) with ESMTP id jBTILL99053506; Thu, 29 Dec 2005 11:21:21 -0700 (MST) (envelope-from mfuhr@winnie.fuhr.org) Received: (from mfuhr@localhost) by winnie.fuhr.org (8.13.4/8.13.4/Submit) id jBTILL9Y053505; Thu, 29 Dec 2005 11:21:21 -0700 (MST) (envelope-from mfuhr) Date: Thu, 29 Dec 2005 11:21:21 -0700 From: Michael Fuhr To: Ken Winter Cc: PostgreSQL pg-sql list Subject: Re: Arrays in PL/pgSQL routines? Message-ID: <20051229182120.GA53437@winnie.fuhr.org> References: <005101c60c9f$cfb5f660$6603a8c0@kenxp> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <005101c60c9f$cfb5f660$6603a8c0@kenxp> X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, score=0.055 required=5 tests=[AWL=0.055] X-Spam-Score: 0.055 X-Spam-Level: X-Archive-Number: 200512/243 X-Sequence-Number: 23785 On Thu, Dec 29, 2005 at 12:46:28PM -0500, Ken Winter wrote: > Can arrays be declared in PL/pgSQL routines? If so, how? > > Section 8.10 of the documentation > (http://www.postgresql.org/docs/7.4/static/arrays.html) tells how to declare > and use arrays as table columns. But I don't find any part of the > documentation that says how to declare a simple array local to a PL/pgSQL > function. I tried the following guess, but it only won me a "syntax error > at or near VARCHAR: > > DECLARE > > my_array VARCHAR []; What version of PostgreSQL are you using? Could you post a complete function instead of just an excerpt? The following works for me in 7.4.10 and later but not in 7.3.12: CREATE FUNCTION foo(varchar, varchar, varchar) RETURNS varchar[] AS ' DECLARE my_array varchar[] := ''{}''; BEGIN my_array[1] := $1; my_array[2] := $2; my_array[3] := $3; RETURN my_array; END; ' LANGUAGE plpgsql IMMUTABLE STRICT; SELECT foo('a', 'b', 'c'); foo --------- {a,b,c} (1 row) Array handling was improved in 7.4; in earlier versions you'll probably get an error like the following after SELECT: WARNING: plpgsql: ERROR during compile of foo near line 4 ERROR: syntax error at or near "[" That's a little different than your "syntax error at or near VARCHAR." Was that the actual error message? -- Michael Fuhr