pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Emi Lu <emilu@encs.concordia.ca>
To: A. Kretschmer <andreas.kretschmer@schollglas.com>
Cc: pgsql-sql@postgresql.org
Subject: Re: in PlPgSQL function, how to use variable in a "select ...
Date: Fri, 17 Mar 2006 15:33:18 -0500
Message-ID: <441B1D0E.3000109@encs.concordia.ca> (raw)
In-Reply-To: <20060317195031.GA8508@webserv.wug-glas.de>
References: <441AF775.7060006@encs.concordia.ca>
	<684362e10603170956j20174d07q@mail.gmail.com>
	<441B0CCD.9020704@encs.concordia.ca>
	<20060317195031.GA8508@webserv.wug-glas.de>


>>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 ;
>>    
>>
>
>This can't work, read the docu:
>http://www.postgresql.org/docs/8.1/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-...
>
>You should build a string with your SQL and EXECUTE this string.
>  
>
Thank you Andreas. Unfortunately it did not work. maybe I made something 
wrong?

drop table t1;
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
  query_value := 'SELECT col2 FROM lengendTableName WHERE col1 = \'' || 
col1_value || '\'';
 
  EXECUTE query_value INTO cm_tableName;

  RETURN cm_tableName;
END;
$$ language 'plpgsql' IMMUTABLE STRICT;
select test('001');

Error:
ERROR:  syntax error at or near "$2" at character 20
QUERY:  SELECT   $1  INTO  $2
CONTEXT:  PL/pgSQL function "test" line 9 at execute statement
LINE 1: SELECT   $1  INTO  $2


I am using postgresql 8.0.1, and I am afraid that 8.0 does not support 
"excecute ... into ...." 

http://www.postgresql.org/docs/8.0/static/plpgsql-statements.html

I will try to use cursor.

Thank you very much for all your help anyway.
Ying







view thread (5+ messages)  latest in thread

Message-ID: <441B1D0E.3000109@encs.concordia.ca>
Permalink:  ../441B1D0E.3000109@encs.concordia.ca/
Also on:    postgresql.org/message-id/441B1D0E.3000109@encs.concordia.ca

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: emilu@encs.concordia.ca, andreas.kretschmer@schollglas.com
  Subject: Re: in PlPgSQL function, how to use variable in a "select ...
  In-Reply-To: <441B1D0E.3000109@encs.concordia.ca>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox