[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