Re: tablename as attribute in pgplsql - Mailing list pgsql-sql
From | Benoît Bournon |
---|---|
Subject | Re: tablename as attribute in pgplsql |
Date | |
Msg-id | 3ED46C17.3060705@adelis.com Whole thread Raw |
In response to | tablename as attribute in pgplsql (Benoît Bournon <benoit.bournon@adelis.com>) |
List | pgsql-sql |
Thx to Staphan<br /><br /> Finally I find a solution :<br /><br /> I have tables with different languages and I must findthe correct languages :<br /><br /> DECLARE<br /> chaine VARCHAR := 'category';<br /> <br /> col_return VARCHAR :='id_category_unique' ;<br /> col_id VARCHAR := 'id_category' ;<br /> col_value INTEGER := 5 ;<br /> lang_id INTEGER:= 3 ;<br /> <br /> r RECORD;<br /> str BIGINT;<br /> BEGIN<br /> FOR r in execute 'SELECT ' || col_return ||'AS info<br /> FROM ' || chaine || '<br /> WHERE ' || col_id || ' = ' || col_value || '<br /> ANDid_language = ' || lang_id<br /> loop<br /> str := r.info;<br /> END LOOP;<br /> RETURN str;<br /> END;<br /><br/> Stephan Szabo a écrit:<br /><blockquote cite="mid20030527082842.F2773-100000@megazone23.bigpanda.com" type="cite"><prewrap="">On Tue, 27 May 2003, [ISO-8859-1] Beno?t Bournon wrote: </pre><blockquote type="cite"><pre wrap="">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 ; </pre></blockquote><pre wrap=""> 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 'DECLAREchaine VARCHAR := 'client';r RECORD;str BIGINT; BEGINFOR r in execute ''SELECT id_user FROM '' || chaine || '' WHERE id_user = 112'' loop str := r.id_user;END LOOP;RETURN str; END;' </pre><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><pre wrap="">Stephan Szabo a ?crit: </pre><blockquote type="cite"><pre wrap="">On Thu, 22 May 2003, [ISO-8859-1] Beno?t Bournon wrote: </pre><blockquote type="cite"><pre wrap="">DECLAREusertablename 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 </pre></blockquote><pre wrap="">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? <a class="moz-txt-link-freetext" href="http://www.postgresql.org/docs/faqs/FAQ.html">http://www.postgresql.org/docs/faqs/FAQ.html</a> </pre></blockquote></blockquote><pre wrap=""> ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? <a class="moz-txt-link-freetext" href="http://www.postgresql.org/docs/faqs/FAQ.html">http://www.postgresql.org/docs/faqs/FAQ.html</a> </pre></blockquote></blockquote><pre wrap=""> </pre></blockquote>