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>

pgsql-sql by date:

Previous
From: "walid.dib"
Date:
Subject: PostgreSQL and industry
Next
From: "Vikas"
Date:
Subject: Help required on update query