Assigning Values to Composite Types

View: New views
2 Messages — Rating Filter:   Alert me  

Assigning Values to Composite Types

by Gary Chambers-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

All...

Given the following [hopefully] relevant portions of a function:

CREATE OR REPLACE FUNCTION solve(FLOAT8, VARCHAR, CHAR)
RETURNS SETOF sometype_t AS
$solve$
DECLARE
    data sometype_t;
...

BEGIN
    FOR term_count IN
        SELECT DISTINCT coord_type AS coord_type, MAX(term) AS maxterms
        ...
    LOOP
        FOR i IN 0 .. term_count.maxterms LOOP
            SELECT SUM(a + b + c) INTO Q
            ...
            S := S + (Q * onevalue * somevalue);
        END LOOP;
        -- This is the only means of verifying/viewing the data
        RAISE NOTICE '% = %', term_count.coord_type, S;

        /* Here is where I am stuck trying to fill data
           I've tried:

           data.term_count.coord_type := S;
           (data.term_count).coord_type := S;
           data.(term_count.coord_type) := S;
        */

        S := 0.0;
    END LOOP;
    RETURN NEXT vsop87_data;
END;
$solve$ LANGUAGE plpgsql STRICT IMMUTABLE;

Is there a means of filling something.something.something with a value
so I can get all the values into a single row?  Thanks very much in
advance.

-- Gary Chambers

/* Nothing fancy and nothing Microsoft! */

--
Sent via pgsql-sql mailing list (pgsql-sql@...)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql

Re: Assigning Values to Composite Types

by Tom Lane-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Gary Chambers <gwchamb@...> writes:
>         /* Here is where I am stuck trying to fill data
>            I've tried:

>            data.term_count.coord_type := S;
>            (data.term_count).coord_type := S;
>            data.(term_count.coord_type) := S;
>         */

I'm afraid plpgsql isn't tremendously bright about such cases.  If
you have all the values available at once, though, it seems like
you should be able to do

        data.term_count := row(this, that, the_other);

An explicit cast of the row() construct to the target column's type
might be a good idea --- I think it would work without, but probably
not with good performance.

                        regards, tom lane

--
Sent via pgsql-sql mailing list (pgsql-sql@...)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql