[postgis-users] pl/pgsql question: dynamic access to record.column

Mark Cave-Ayland mark.cave-ayland at ilande.co.uk
Wed Jan 10 13:10:54 PST 2007


On Wed, 2007-01-10 at 12:24 -0800, Dylan Beaudette wrote:

> 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!


Hi Dylan,

You'll need to post the entire stored procedure for this one so that we
can tell the difference between PL/PGSQL variables and column names.


Kind regards,

Mark.





More information about the postgis-users mailing list