Обсуждение: How the get variables out of a plggsql RECORD by column number
A record type contians the 1st row form dynamic query result.
From that row I want to select the 1st column.
How do I do that?
CREATE OR REPLACE FUNCTION dswz.save_query (TEXT) RETURNS BOOL AS '
DECLARE
_query ALIAS FOR $1;
_temp_query TEXT;
_row RECORD;
_id INT8;
DECLARE
_query ALIAS FOR $1;
_temp_query TEXT;
_row RECORD;
_id INT8;
_type INT8;
BEGIN
/* select the 1st row*/
_temp_query := ''SELECT * FROM ('' || _query || '') AS table_source LIMIT 1'';
FOR _row IN EXECUTE temp_query LOOP
/* select the 1st column */
_id := ????_row[0]??????
END LOOP;
END LOOP;
/* Saves the query and his type */
SELECT INTO _type type FROM objects WHERE id = _id;
INSERT INTO queries VALUES (_query, _type);
RETURN TRUE;
END
END
' LANGUAGE 'plpgsql' SECURITY DEFINER;
--- Tjibbe Rijpma <t.b.rijpma@student.tudelft.nl>
wrote:
> A record type contians the 1st row form dynamic
> query result.
>
> From that row I want to select the 1st column.
>
> How do I do that?
By name, i.e. "_row.firstfieldname". Perhaps you are
looking for a generic function, that can be applied to
any table? Pl/pgsql is not equipped to do that. I
believe that you can achieve what you want with
pl/tcl, pl/python or pl/perl (not sure about the
last).
>
>
> CREATE OR REPLACE FUNCTION dswz.save_query (TEXT)
> RETURNS BOOL AS '
> DECLARE
> _query ALIAS FOR $1;
> _temp_query TEXT;
> _row RECORD;
> _id INT8;
> _type INT8;
>
> BEGIN
> /* select the 1st row*/
> _temp_query := ''SELECT * FROM ('' || _query || '')
> AS table_source LIMIT 1'';
>
> FOR _row IN EXECUTE temp_query LOOP
>
> /* select the 1st column */
> _id := ????_row[0]??????
>
> END LOOP;
>
> /* Saves the query and his type */
> SELECT INTO _type type FROM objects WHERE id = _id;
> INSERT INTO queries VALUES (_query, _type);
>
>
> RETURN TRUE;
> END
>
> ' LANGUAGE 'plpgsql' SECURITY DEFINER;
__________________________________
Do you Yahoo!?
Yahoo! Mail - now with 250MB free storage. Learn more.
http://info.mail.yahoo.com/mail_250
> > A record type contians the 1st row form dynamic
> > query result.
> >
> > From that row I want to select the 1st column.
> >
> > How do I do that?
>
Can you use a simple LOOP?
DECLARE rcrd_data RECORD
FOR rcrd_data IN SELECT tbl_source.first_column,
tbl_source.second_column,
FROM tbl_source
LOOP
-- Now rcrd_data.first_column has data.
END LOOP;
See
http://www.postgresql.org/docs/7.4/interactive/plpgsql-control-structures.html#PLPGSQL-RECORDS-ITERATING
for more information.
Kind Regards,
Keith
PS Caution, I am still a novice myself.
______________________________________________
99main Internet Services http://www.99main.com
Yes I'm looking for a generic function, because I do not know the
fieldnames.
Is there no possibility to insert the query result into a ARRAY and then
select _result[0][0]? (I didn't get it work.....)
Or to get the fieldnames?
Pl/tcl, pl/python or pl/perl are not installed by my provider and I have no
experience with it.
Tjibbe
----- Original Message -----
From: "Jeff Eckermann" <jeff_eckermann@yahoo.com>
To: "Tjibbe Rijpma" <t.b.rijpma@student.tudelft.nl>;
<pgsql-novice@postgresql.org>
Sent: Tuesday, January 18, 2005 15:41
Subject: Re: [NOVICE] How the get variables out of a plggsql RECORD by
column number
> --- Tjibbe Rijpma <t.b.rijpma@student.tudelft.nl>
> wrote:
>
> > A record type contians the 1st row form dynamic
> > query result.
> >
> > From that row I want to select the 1st column.
> >
> > How do I do that?
>
> By name, i.e. "_row.firstfieldname". Perhaps you are
> looking for a generic function, that can be applied to
> any table? Pl/pgsql is not equipped to do that. I
> believe that you can achieve what you want with
> pl/tcl, pl/python or pl/perl (not sure about the
> last).
>
> >
> >
> > CREATE OR REPLACE FUNCTION dswz.save_query (TEXT)
> > RETURNS BOOL AS '
> > DECLARE
> > _query ALIAS FOR $1;
> > _temp_query TEXT;
> > _row RECORD;
> > _id INT8;
> > _type INT8;
> >
> > BEGIN
> > /* select the 1st row*/
> > _temp_query := ''SELECT * FROM ('' || _query || '')
> > AS table_source LIMIT 1'';
> >
> > FOR _row IN EXECUTE temp_query LOOP
> >
> > /* select the 1st column */
> > _id := ????_row[0]??????
> >
> > END LOOP;
> >
> > /* Saves the query and his type */
> > SELECT INTO _type type FROM objects WHERE id = _id;
> > INSERT INTO queries VALUES (_query, _type);
> >
> >
> > RETURN TRUE;
> > END
> >
> > ' LANGUAGE 'plpgsql' SECURITY DEFINER;
>
>
>
>
> __________________________________
> Do you Yahoo!?
> Yahoo! Mail - now with 250MB free storage. Learn more.
> http://info.mail.yahoo.com/mail_250
>
--- Tjibbe Rijpma <t.b.rijpma@student.tudelft.nl>
wrote:
> Yes I'm looking for a generic function, because I do
> not know the
> fieldnames.
>
> Is there no possibility to insert the query result
> into a ARRAY and then
> select _result[0][0]? (I didn't get it work.....)
>
> Or to get the fieldnames?
You could query the system catalogs. I haven't tried
this, but: a query like "select column_name into
columnnamevariable from information_schema.columns
where table_name = whatever and ordinal_position = 1"
should get you what you want.
>
> Pl/tcl, pl/python or pl/perl are not installed by my
> provider and I have no
> experience with it.
>
>
> Tjibbe
> ----- Original Message -----
> From: "Jeff Eckermann" <jeff_eckermann@yahoo.com>
> To: "Tjibbe Rijpma" <t.b.rijpma@student.tudelft.nl>;
> <pgsql-novice@postgresql.org>
> Sent: Tuesday, January 18, 2005 15:41
> Subject: Re: [NOVICE] How the get variables out of a
> plggsql RECORD by
> column number
>
>
> > --- Tjibbe Rijpma <t.b.rijpma@student.tudelft.nl>
> > wrote:
> >
> > > A record type contians the 1st row form dynamic
> > > query result.
> > >
> > > From that row I want to select the 1st column.
> > >
> > > How do I do that?
> >
> > By name, i.e. "_row.firstfieldname". Perhaps you
> are
> > looking for a generic function, that can be
> applied to
> > any table? Pl/pgsql is not equipped to do that.
> I
> > believe that you can achieve what you want with
> > pl/tcl, pl/python or pl/perl (not sure about the
> > last).
> >
> > >
> > >
> > > CREATE OR REPLACE FUNCTION dswz.save_query
> (TEXT)
> > > RETURNS BOOL AS '
> > > DECLARE
> > > _query ALIAS FOR $1;
> > > _temp_query TEXT;
> > > _row RECORD;
> > > _id INT8;
> > > _type INT8;
> > >
> > > BEGIN
> > > /* select the 1st row*/
> > > _temp_query := ''SELECT * FROM ('' || _query ||
> '')
> > > AS table_source LIMIT 1'';
> > >
> > > FOR _row IN EXECUTE temp_query LOOP
> > >
> > > /* select the 1st column */
> > > _id := ????_row[0]??????
> > >
> > > END LOOP;
> > >
> > > /* Saves the query and his type */
> > > SELECT INTO _type type FROM objects WHERE id =
> _id;
> > > INSERT INTO queries VALUES (_query, _type);
> > >
> > >
> > > RETURN TRUE;
> > > END
> > >
> > > ' LANGUAGE 'plpgsql' SECURITY DEFINER;
> >
> >
> >
> >
> > __________________________________
> > Do you Yahoo!?
> > Yahoo! Mail - now with 250MB free storage. Learn
> more.
> > http://info.mail.yahoo.com/mail_250
> >
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please
> send an appropriate
> subscribe-nomail command to
> majordomo@postgresql.org so that your
> message can get through to the mailing list
> cleanly
>
__________________________________
Do you Yahoo!?
Yahoo! Mail - Helps protect you from nasty viruses.
http://promotions.yahoo.com/new_mail