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 6554A9DCA86 for ; Fri, 17 Mar 2006 15:24:02 -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 57176-04 for ; Fri, 17 Mar 2006 15:24:01 -0400 (AST) X-Greylist: from auto-whitelisted by SQLgrey- Received: from perseverance.encs.concordia.ca (perseverance-96.encs.concordia.ca [132.205.96.94]) by postgresql.org (Postfix) with ESMTP id A46EA9DC871 for ; Fri, 17 Mar 2006 15:23:59 -0400 (AST) Received: from [132.205.47.205] (IDENT:emilu@curacao.encs.concordia.ca [132.205.47.205]) by perseverance.encs.concordia.ca (8.12.11/8.12.11) with ESMTP id k2HJNwiu012781; Fri, 17 Mar 2006 14:23:58 -0500 Message-ID: <441B0CCD.9020704@encs.concordia.ca> Date: Fri, 17 Mar 2006 14:23:57 -0500 From: Emi Lu Reply-To: emilu@encs.concordia.ca User-Agent: Mozilla Thunderbird 1.0.7 (X11/20050923) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Markus Bertheau CC: pgsql-sql@postgresql.org Subject: Re: in PlPgSQL function, how to use variable in a "select ... References: <441AF775.7060006@encs.concordia.ca> <684362e10603170956j20174d07q@mail.gmail.com> In-Reply-To: <684362e10603170956j20174d07q@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.43 on perseverance.encs.concordia.ca at 2006/03/17 14:23:58 EST X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, score=0.135 required=5 tests=[AWL=0.135, UPPERCASE_25_50=0] X-Spam-Score: 0.135 X-Spam-Level: X-Archive-Number: 200603/252 X-Sequence-Number: 24598 Does not work either, the whole function is: create table t1(col1 varchar(3), col2 varchar(100)); insert into t1 values('001', 'Result 1'); insert into t1 values('002', 'Result 2'); insert into t1 values('003', 'Result 3'); CREATE OR REPLACE FUNCTION test(VARCHAR) RETURNS VARCHAR AS $$ DECLARE col1_value ALIAS FOR $1; cm_tableName st1_legend.code_map_tablename%TYPE; lengendTableName VARCHAR := 't1'; query_value VARCHAR ; BEGIN SELECT INTO cm_tableName col2 FROM lengendTableName WHERE col1 = col1_value ; EXECUTE query_value; RETURN cm_tableName; END; $$ language 'plpgsql' IMMUTABLE STRICT; select test('001'); Error: ERROR: syntax error at or near "$1" at character 20 QUERY: SELECT col2 FROM $1 WHERE col1 = $2 CONTEXT: PL/pgSQL function "test" line 8 at select into variables LINE 1: SELECT col2 FROM $1 WHERE col1 = $2 Does it mean I have to use the cursor ? Thanks, Ying >I think it is SELECT INTO cm_tableName col2 FROM ... WHERE ... > >2006/3/17, Emi Lu : > > >>Hello, >> >>In pl/pgsql (postgresql 8.01), how to use variables in select .. into .. >>command >> >>CREATE OR REPLACE FUNCTION test(VARCHAR) RETURNS VARCHAR AS $$ >>DECLARE >> var1 ALIAS FOR $1; >> cm_tableName tableA.col1%TYPE; >> T1 VARCHAR := 'sourceTable'; >> query_value VARCHAR ; >>BEGIN >> >> SELECT col2 INTO cm_tableName FROM T1 WHERE col1 = var1 ; >> EXECUTE query_value; >> >> >> RETURN cm_tableName; >> END; >>$$ language 'plpgsql' IMMUTABLE STRICT; >> >>select test('abc'); >> >>Failed. >> >> >>Also, tried "SELECT col2 INTO cm_tableName FROM || T1 WHERE col1 = || >>var1 " and >>"SELECT col2 INTO cm_tableName FROM || T1 || WHERE col1 = || var1" >> >>Failed as well. >> >>T1 and var1 both are variables, may I how to use variables in a "select >>... into " query please? >> >>Thanks a lot, >>Ying >> >> >> >> >> >>---------------------------(end of broadcast)--------------------------- >>TIP 6: explain analyze is your friend >> >> >>