У меня довольно сложная структура данных, которая лежит в нескольких таблицах.У меня есть функция, которая делает копию этой структуры.Я хочу сделать копию и получить вновь созданные данные в одном запросе, подобном следующему:
SELECT
*
FROM
main_table
JOIN other_table
ON (main_table.id = other_table.main_id)
WHERE
main_table.id = make_copy(old_id);
Копия успешно создана, но не возвращена вышеуказанным запросом.Я предполагаю, что это еще не видимо для внешнего запроса или как-то совершено .
Я также пытался использовать WITH ... SELECT ...
, но безуспешно ...
Функция make_copy(id)
объявлена как VOLATILE
, поскольку она изменяет базу данных, и несколько вызовов с одним и тем же параметром создадут несколько копий.
Возможное решение может состоять в том, что функция make_copy(id)
вернет всю новую структуру данных(SELECT * FROM make_copy(old_id)
), но для этого потребуется много псевдонимов (многие таблицы имеют столбец id
или name
).Также у меня было бы много мест для построения (чтения) этой структуры данных.
Как я могу вызвать эту функцию и использовать ее результат (и все побочные эффекты) в одном запросе?