Итак, у меня есть следующие таблицы.
G
__________________________
id_musician | id_album
--------------------------
1 | 51
3 | 52
2 | 53
3 | 54
1 | 55
3 | 56
C
__________________________
id_album | year
--------------------------
51 | 1990
52 | 2001
53 | 1990
54 | 2001
55 | 1945
56 | 1945
Я создал следующую функцию:
CREATE OR REPLACE FUNCTION test2 (year1 INTEGER, p_type VARCHAR(1))
RETURNS SETOF test2 AS $$
DECLARE
output test2;
BEGIN
IF p_type='S' THEN
FOR output IN SELECT g.id_artist, c.year, COUNT(c.id_album) AS albums
FROM G g, C c
WHERE g.id_album = c.id_album AND
c.year = year1
GROUP BY c.year, g.id_musician
LOOP
RETURN NEXT output;
END LOOP;
END IF
RETURN;
END;
$$LANGUAGE plpgsql;
test2 - это тип вывода, который я создал:
CREATE TYPE test2 AS(
id smallint,
year smallint,
total_albums integer)
Функция принимает год и тип перфомера.Он возвращает для каждого года и исполнителя (в данном случае гитариста 'G') количество записей, в которых исполнитель участвовал каждый год.
Мне бы хотелось, чтобы функция вставляла этот вывод втаблицу, которую я создал, вместо того, чтобы просто показать вывод:
CREATE TABLE TEST2_TABLE (
id smallint,
year smallint,
total_albums integer );