Re: tablename as attribute in pgplsql

From: Benoît Bournon <benoit(dot)bournon(at)adelis(dot)com>
To: pgsql-sql(at)postgresql(dot)org
Subject: Re: tablename as attribute in pgplsql
Date: 2003-05-28 07:58:15
Message-ID: 3ED46C17.3060705@adelis.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Thx to Staphan

Finally I find a solution :

I have tables with different languages and I must find the correct
languages :

DECLARE
chaine VARCHAR := 'category';

col_return VARCHAR := 'id_category_unique' ;
col_id VARCHAR := 'id_category' ;
col_value INTEGER := 5 ;
lang_id INTEGER := 3 ;

r RECORD;
str BIGINT;
BEGIN
FOR r in execute 'SELECT ' || col_return ||' AS info
FROM ' || chaine || '
WHERE ' || col_id || ' = ' || col_value || '
AND id_language = ' || lang_id
loop
str := r.info;
END LOOP;
RETURN str;
END;

Stephan Szabo a écrit:

>On Tue, 27 May 2003, [ISO-8859-1] Beno?t Bournon wrote:
>
>
>
>>I try to do that :
>>
>>DECLARE
>> chaine VARCHAR := 'client' ;
>> str BIGINT ;
>>BEGIN
>>
>> SELECT id_user into str FROM client WHERE id_user = 112 ;
>>
>> EXECUTE 'SELECT id_user into str FROM chaine WHERE id_user = 112' ;
>>
>> RETURN str ;
>>END ;
>>
>>
>
>It would be (doubling quotes because the function body is in quotes)
>EXECUTE ''SELECT id_user into str FROM '' || chaine || '' WHERE id_user =
>112''
>
>except that IIRC you can't do select into str from execute, instead (as I
>alluded to below) I think you need to say something wacky like
>
>'DECLARE
> chaine VARCHAR := 'client';
> r RECORD;
> str BIGINT;
>BEGIN
> FOR r in execute ''SELECT id_user FROM '' || chaine || '' WHERE id_user
>= 112'' loop
> str := r.id_user;
> END LOOP;
> RETURN str;
>END;'
>
>
>
>>>>Stephan Szabo a ?crit:
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>>On Thu, 22 May 2003, [ISO-8859-1] Beno?t Bournon wrote:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>DECLARE
>>>>>> usertablename ALIAS FOR $1 ;
>>>>>> userid ALIAS FOR $2 ;
>>>>>>
>>>>>> id_lang BIGINT ;
>>>>>>
>>>>>> var VARCHAR(200) ;
>>>>>>
>>>>>>BEGIN
>>>>>> var := 'client' ;
>>>>>>
>>>>>> SELECT id_language INTO id_lang FROM client WHERE id_user = userid ;
>>>>>> IF NOT (id_lang = 1 OR id_lang = 3) THEN
>>>>>> id_lang = 1 ;
>>>>>> END IF ;
>>>>>>
>>>>>> RETURN id_lang ;
>>>>>>
>>>>>>END ;
>>>>>>
>>>>>>I want to use client table as a variable
>>>>>>
>>>>>>How could I do
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>Look at the documentation for EXECUTE. Unfortunately using EXECUTE into a
>>>>>variable is a little complicated right now AFAIR because you can't using
>>>>>select ... INTO variable inside the execute, but instead need to use
>>>>>something like for in execute loop.
>>>>>
>>>>>
>>>>>
>>>>>---------------------------(end of broadcast)---------------------------
>>>>>TIP 5: Have you checked our extensive FAQ?
>>>>>
>>>>>http://www.postgresql.org/docs/faqs/FAQ.html
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>---------------------------(end of broadcast)---------------------------
>>>TIP 5: Have you checked our extensive FAQ?
>>>
>>>http://www.postgresql.org/docs/faqs/FAQ.html
>>>
>>>
>>>
>>>
>>>
>
>
>
>

Browse pgsql-sql by date

  From Date Subject
Next Message Luis Sousa 2003-05-28 09:03:42 Re: plpgsql recursion
Previous Message Ries van Twisk 2003-05-28 06:54:17 Re: [Fwd: SQL book]