RE: Re: PL/pgsql EXECUTE 'SELECT INTO ...' - Mailing list pgsql-sql

From Michael Ansley
Subject RE: Re: PL/pgsql EXECUTE 'SELECT INTO ...'
Date
Msg-id 7F124BC48D56D411812500D0B747251480F3E2@FILESERVER002
Whole thread Raw
In response to PL/pgsql EXECUTE 'SELECT INTO ...'  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-sql
<p><font size="2">What I wrote wasn't about temp tables, it was about selecting into plpgsql variables.  It would
appearthat Jan's syntax gets around this problem.</font><p><font size="2">MikeA</font><br /><p><font
size="2">-----OriginalMessage-----</font><br /><font size="2">From: Jan Wieck [<a
href="mailto:janwieck@Yahoo.com">mailto:janwieck@Yahoo.com</a>]</font><br/><font size="2">Sent: 08 February 2001
13:30</font><br/><font size="2">To: Tom Lane</font><br /><font size="2">Cc: Jan Wieck; pgsql-hackers@postgreSQL.org;
pgsql-sql@postgreSQL.org</font><br/><font size="2">Subject: [SQL] Re: PL/pgsql EXECUTE 'SELECT INTO ...'</font><br
/><p><fontsize="2">Tom Lane wrote:</font><br /><font size="2">> I have looked a little bit at what it'd take to make
SELECTINTO inside</font><br /><font size="2">> an EXECUTE work the same as it does in plain plpgsql --- that is,
the</font><br/><font size="2">> INTO should reference plpgsql variables, not a destination table.</font><br /><font
size="2">>It looks to me like this is possible but would require some nontrivial</font><br /><font size="2">>
re-engineeringinside plpgsql.  What I'm visualizing is that EXECUTE</font><br /><font size="2">> should read its
stringargument not just as an SPI_exec() string, but</font><br /><font size="2">> as an arbitrary plpgsql
proc_stmt. This would offer some interesting</font><br /><font size="2">> capabilities, like building a whole
FOR-loopfor dynamic execution.</font><br /><font size="2">> But there are a number of problems to be surmounted,
notablyarranging</font><br /><font size="2">> for the parsetree built by the plpgsql compiler not to be
irretrievably</font><br/><font size="2">> memory-leaked.  (That ties into something I'd wanted to do
anyway,</font><br/><font size="2">> which is to have the plpgsql compiler build its trees in a memory</font><br
/><fontsize="2">> context associated with the function, not via malloc().)</font><br /><font size="2">></font><br
/><fontsize="2">> This does not look like something to be tackling when we're already</font><br /><font
size="2">>in late beta, unfortunately.  So we have to decide what to do for 7.1.</font><br /><font size="2">> If
wedo nothing now, and then implement this feature in 7.2, we will</font><br /><font size="2">> have a backwards
compatibilityproblem: EXECUTE 'SELECT INTO ...'</font><br /><font size="2">> will completely change in
meaning.</font><br/><font size="2">></font><br /><font size="2">> I am inclined to keep our options open by
forbiddingEXECUTE 'SELECT</font><br /><font size="2">> INTO ...' for now.  That's more than a tad annoying, because
thatleaves</font><br /><font size="2">> no useful way to do a dynamically-built SELECT, but if we don't
forbid</font><br/><font size="2">> it I think we'll regret it later.</font><p><font size="2">    You can do
somethinglike</font><p><font size="2">        FOR record_var IN EXECUTE <string-expr> LOOP</font><br /><font
size="2">           ...</font><br /><font size="2">        END LOOP;</font><p><font size="2">    In this case, the
<string-expr>executed over SPI_exec() must</font><br /><font size="2">    return tuples (0-n). Otherwise you'll
geta runtime error.</font><p><font size="2">    Inside the loop you have access to the tuples via the record.</font><br
/><fontsize="2">    Is  that  the dynamically-built SELECT capability you've been</font><br /><font size="2">   
missing?</font><p><fontsize="2">    There's not that much need for mucking with  temp  tables  in</font><br /><font
size="2">   EXECUTE as all this discussion looks to me.</font><br /><p><font size="2">Jan</font><p><font
size="2">--</font><p><fontsize="2">#======================================================================#</font><br
/><fontsize="2"># It's easier to get forgiveness for being wrong than for being right. #</font><br /><font size="2">#
Let'sbreak this rule - forgive me.                                  #</font><br /><font
size="2">#==================================================JanWieck@Yahoo.com #</font><br /><br /><p><font
size="2">_________________________________________________________</font><br/><font size="2">Do You Yahoo!?</font><br
/><fontsize="2">Get your free @yahoo.com address at <a href="http://mail.yahoo.com"
target="_blank">http://mail.yahoo.com</a></font><code><fontsize="3"><br /><br />
**********************************************************************<br/> This email and any files transmitted with
itare confidential and<br /> intended solely for the use of the individual or entity to whom they<br /> are addressed.
Ifyou have received this email in error please notify<br /> Nick West - Global Infrastructure Manager.<br /><br /> This
footnotealso confirms that this email message has been swept by<br /> MIMEsweeper for the presence of computer
viruses.<br/><br /> www.mimesweeper.com<br /> **********************************************************************<br
/></font></code>

pgsql-sql by date:

Previous
From: Jan Wieck
Date:
Subject: Re: PL/pgsql EXECUTE 'SELECT INTO ...'
Next
From: Jan Wieck
Date:
Subject: Re: [HACKERS] Re: PL/PGSQL function with parameters