Обсуждение: How the get variables out of a plggsql RECORD by column number

Поиск
Список
Период
Сортировка

How the get variables out of a plggsql RECORD by column number

От
"Tjibbe Rijpma"
Дата:
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;
_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;

Re: How the get variables out of a plggsql RECORD by column number

От
Jeff Eckermann
Дата:
--- 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

Re: How the get variables out of a plggsql RECORD by column number

От
"Keith Worthington"
Дата:
> > 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


Re: How the get variables out of a plggsql RECORD by column number

От
"Tjibbe Rijpma"
Дата:
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
>


Re: How the get variables out of a plggsql RECORD by column number

От
Jeff Eckermann
Дата:
--- 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