l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
December 2: Social gathering
Next Installfest:
TBD
Latest News:
Nov. 18: Club officer elections
Page last updated:
2007 Jan 10 19:01

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
[vox-tech] pl/pgsql question: dynamic access to record.column
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[vox-tech] pl/pgsql question: dynamic access to record.column



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
_______________________________________________
vox-tech mailing list
vox-tech@lists.lugod.org
http://lists.lugod.org/mailman/listinfo/vox-tech



LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
Appahost Applications
For a significant contribution towards our projector, and a generous donation to allow us to continue meeting at the Davis Library.