Обсуждение: Assigning Values to Composite Types

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

Assigning Values to Composite Types

От
Gary Chambers
Дата:
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
FORi 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! */


Re: Assigning Values to Composite Types

От
Tom Lane
Дата:
Gary Chambers <gwchamb@gmail.com> 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