Обсуждение: Assigning Values to Composite Types
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! */
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