Access a Field / Column of a resultset by Number

Started by Daniel Schuchardtover 16 years ago5 messagesgeneral
Jump to latest
#1Daniel Schuchardt
d.schuchardt@prodat-sql.de

hy group,

i currently look for a solution to access a resultset in a db-stored
function by number. in plpgsql thats not possible.
so i checked out plpython. so far so good, thats working:

CREATE OR REPLACE FUNCTION dokv_dorecnokeywords(sqlstatement VARCHAR)
RETURNS VOID AS
$$
rv = plpy.execute(sqlstatement, 1)
|||||->"SELECT * FROM art WHERE ak_nr='TEST'"
s = 'ak_bez' |||| fieldname is static here, should be by number
plpy.notice(s+'='+rv[0][s])
return
$$ LANGUAGE plpythonu;

now i need a solution to get the number of fields as well as the
fieldnames of that resultset and run through all fields (by number or by
name). (i need the fieldname too)

--

Daniel Schuchardt
/Softwareentwicklung/

/http://www.prodat-sql.de/

#2Daniel Schuchardt
d.schuchardt@prodat-sql.de
In reply to: Daniel Schuchardt (#1)
Re: Access a Field / Column of a resultset by Number

thats exactly the same i'm looking for:

http://wiki.postgresql.org/wiki/Todo
http://archives.postgresql.org/pgsql-patches/2005-07/msg00458.php

(todo list for plpgsql)

*Server-Side Languages
*PL/pgSQL
*
*[D] Allow listing of record column names, and access to record columns
*via variables, e.g. columns := r.(*), tval2 := r.(colname)
*
*Re: PL/PGSQL: Dynamic Record Introspection

is that is possible in any pl* language?

Daniel Schuchardt schrieb:

hy group,

i currently look for a solution to access a resultset in a db-stored
function by number. in plpgsql thats not possible.
so i checked out plpython. so far so good, thats working:

CREATE OR REPLACE FUNCTION dokv_dorecnokeywords(sqlstatement VARCHAR)
RETURNS VOID AS
$$
rv = plpy.execute(sqlstatement, 1)
|||||->"SELECT * FROM art WHERE ak_nr='TEST'"
s = 'ak_bez' |||| fieldname is static here, should be by number
plpy.notice(s+'='+rv[0][s])
return
$$ LANGUAGE plpythonu;

now i need a solution to get the number of fields as well as the
fieldnames of that resultset and run through all fields (by number or by
name). (i need the fieldname too)

--
Daniel Schuchardt
/Softwareentwicklung/

/http://www.prodat-sql.de/

#3Scott Marlowe
scott.marlowe@gmail.com
In reply to: Daniel Schuchardt (#2)
Re: Access a Field / Column of a resultset by Number

On Fri, Nov 27, 2009 at 10:09 AM, Daniel Schuchardt
<d.schuchardt@prodat-sql.de> wrote:

thats exactly the same i'm looking for:

http://wiki.postgresql.org/wiki/Todo
http://archives.postgresql.org/pgsql-patches/2005-07/msg00458.php

(todo list for plpgsql)

*Server-Side Languages
*PL/pgSQL
*
*[D] Allow listing of record column names, and access to record columns *via
variables, e.g. columns := r.(*), tval2 := r.(colname)
*
*Re: PL/PGSQL: Dynamic Record Introspection

is that is possible in any pl* language?

Yes, if the language has the architecture to handle it. plpgsql
doesn't right now. pltcl, plperl, and plain old C functions can
examine records and do dynamic stuff with them. Any attempt at doing
dynamic queries right now in plpgsql leads to madness, or so I've been
told.

#4Daniel Schuchardt
d.schuchardt@prodat-sql.de
In reply to: Scott Marlowe (#3)
Re: Access a Field / Column of a resultset by Number

hy scott, thanks for your awnser.

yes thats clear. but i can't find any sourcecode. the pl* language
doesnt matter, i need that feature only in one function all over my db.

did you have any sourcecode examples?

http://www.postgresql.org/docs/8.4/interactive/plperl-database.html

nothing about how to access a column by fieldname.

daniel

Scott Marlowe schrieb:

On Fri, Nov 27, 2009 at 10:09 AM, Daniel Schuchardt
<d.schuchardt@prodat-sql.de> wrote:

thats exactly the same i'm looking for:

http://wiki.postgresql.org/wiki/Todo
http://archives.postgresql.org/pgsql-patches/2005-07/msg00458.php

(todo list for plpgsql)

*Server-Side Languages
*PL/pgSQL
*
*[D] Allow listing of record column names, and access to record columns *via
variables, e.g. columns := r.(*), tval2 := r.(colname)
*
*Re: PL/PGSQL: Dynamic Record Introspection

is that is possible in any pl* language?

Yes, if the language has the architecture to handle it. plpgsql
doesn't right now. pltcl, plperl, and plain old C functions can
examine records and do dynamic stuff with them. Any attempt at doing
dynamic queries right now in plpgsql leads to madness, or so I've been
told.

--
Daniel Schuchardt
/Softwareentwicklung/

/http://www.prodat-sql.de/

#5A. Kretschmer
andreas.kretschmer@schollglas.com
In reply to: Daniel Schuchardt (#1)
Re: Access a Field / Column of a resultset by Number

In response to Daniel Schuchardt :

hy group,

i currently look for a solution to access a resultset in a db-stored
function by number. in plpgsql thats not possible.

Can you wait until 8.5?

http://okbob.blogspot.com/2009/10/dynamic-access-to-record-fields-in.html

Regards, Andreas
--
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG: 0x31720C99, 1006 CCB4 A326 1D42 6431 2EB0 389D 1DC2 3172 0C99