[vox-tech] pl/pgsql question: dynamic access to record.column
Dylan Beaudette
dylan.beaudette at gmail.com
Wed Jan 10 11:28:47 PST 2007
Hi,
I am learning how to use PL/PGSQL and have come upon something that I just
don't seem to be able to solve on my own.
I have a function, which takes a column name as an argument. A FOR loop
iterates over rows, using a RECORD datatype to store each iteration of the
loop.
If I hard-code in a column name into some calculation, things work fine.
However, I cannot seem to figure out how to _dynamically_ access a column
from a RECORD datatype:
-- this works fine : 'field_pct_clay' is a hard-coded column name
DEFINE
hz_record RECORD;
wt_column FLOAT;
thick FLOAT;
...
wt_column := wt_column + (hz_record.field_pct_clay * thick) ;
-- this does not work: 'the_column' is an argument to the function being
defined:
wt_column := wt_column + (hz_record.the_column * thick) ;
^^^^^^^^^^^^^
obviously, the interpreter tells me that there is no column named 'the_column'
in the RECORD iterator...
Searching on google, it seems that a dynamic expression like this needs to be
evaluated with the EXECUTE keyword.... However something like this does not
work:
wt_column := EXECUTE 'wt_column + (hz_record.' || quote_ident(the_column) || '
* thick)' ;
any tips would be a great help!
thanks!
--
Dylan Beaudette
Soils and Biogeochemistry Graduate Group
University of California at Davis
530.754.7341
More information about the vox-tech
mailing list