Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1a6Og8-0004lr-3A for pgsql-sql@arkaria.postgresql.org; Tue, 08 Dec 2015 20:16:04 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1a6Og7-0001oP-Jb for pgsql-sql@arkaria.postgresql.org; Tue, 08 Dec 2015 20:16:03 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1a6Of7-0000cr-QH for pgsql-sql@postgresql.org; Tue, 08 Dec 2015 20:15:02 +0000 Received: from out4-smtp.messagingengine.com ([66.111.4.28]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1a6Of1-0005Dj-1C for pgsql-sql@postgresql.org; Tue, 08 Dec 2015 20:15:00 +0000 Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 80969203B5 for ; Tue, 8 Dec 2015 15:14:53 -0500 (EST) Received: from frontend2 ([10.202.2.161]) by compute6.internal (MEProxy); Tue, 08 Dec 2015 15:14:53 -0500 DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=aklaver.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-sasl-enc :x-sasl-enc; s=mesmtp; bh=0J+itVohrckDtqKnvQherwGG4M0=; b=cYRvsA +N3Po+ROVpVD62+WP1AebrZ8pNTCc6vLUQk1T3ENgjQL2YJL90mwhB2Gj2Z3pKS6 9nlZv2UXLEyiygRu1i5mzjdsXC/S10w6iWe/GxqPDnXcVnPDIwBD5SM16/1OqAAu Zw3LhUEblpdXJ2A/qXQjtkJ5ibZGD/EEeM95Q= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=0J+itVohrckDtqK nvQherwGG4M0=; b=i4L5NlaUuv8QqrR4cK6mqL9gqVzrjqv9bmdDgwnTYFbORDi 1vAwy9I2KYPJCR4+oxwArQwDcHv5pvCc1VKzzWbtOAKfp+gWUch8WoKDifk65R4g 8AmrlfncLRQKe00uKQqKmlxKAtPBWvaRfHQ6ebsWQGIFDK5YZKeKmTvHp5YQ= X-Sasl-enc: BwXLYt7IC7jVQLzZfbj3cOnEtkCmybbABzX3JKgPNhl/ 1449605693 Received: from [192.168.1.2] (65-102-182-223.tukw.qwest.net [65.102.182.223]) by mail.messagingengine.com (Postfix) with ESMTPA id E113C680174; Tue, 8 Dec 2015 15:14:52 -0500 (EST) Subject: Re: How to manually load RETURNS SETOF RECORD? To: Michael Moore , postgres list References: From: Adrian Klaver Message-ID: <56673A1E.5050602@aklaver.com> Date: Tue, 8 Dec 2015 12:14:22 -0800 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Pg-Spam-Score: -2.7 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-sql Precedence: bulk Sender: pgsql-sql-owner@postgresql.org On 12/08/2015 11:34 AM, Michael Moore wrote: > CREATE OR REPLACE FUNCTION PXPORTAL_COMMON_helper.fn_plpgsqltestmulti( > param_subject varchar, > OUT test_id integer, > OUT test_stuff text) > RETURNS SETOF record > AS > $$ > BEGIN > _record.test_id[0] := 100; > _record.test_id[1] := 555; > _record.test_stuff[0] := 'cat'; > _record.test_stuff[1] := 'cow'; > END; > $$ > LANGUAGE 'plpgsql' VOLATILE; > > *select test_id from PXPORTAL_COMMON_helper.fn_plpgsqltestmulti('123');* > ERROR: subscripted object is not an array > CONTEXT: PL/pgSQL function > pxportal_common_helper.fn_plpgsqltestmulti(character varying) line 3 at > assignment > ********** Error ********** > > ERROR: subscripted object is not an array > SQL state: 42804 > Context: PL/pgSQL function > pxportal_common_helper.fn_plpgsqltestmulti(character varying) line 3 at > assignment > > */What is the correct way to accomplish this?/* What is it that you are trying to accomplish? Assuming it is to return a set of rows, would something like the below work: CREATE OR REPLACE FUNCTION fn_plpgsqltestmulti( param_subject varchar, OUT test_id integer, OUT test_stuff text) RETURNS SETOF record AS $$ BEGIN FOR i IN 1..10 LOOP test_id = i; test_stuff = i::text || '_stuff'; RETURN NEXT; END LOOP; END; $$ LANGUAGE 'plpgsql' VOLATILE; test=> select * from fn_plpgsqltestmulti('123'); test_id | test_stuff ---------+------------ 1 | 1_stuff 2 | 2_stuff 3 | 3_stuff 4 | 4_stuff 5 | 5_stuff 6 | 6_stuff 7 | 7_stuff 8 | 8_stuff 9 | 9_stuff 10 | 10_stuff (10 rows) > */TIA, Mike/* -- Adrian Klaver adrian.klaver@aklaver.com -- Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-sql