CREATE OR REPLACE FUNCTION copierContainer (id_container todolist_container.id%TYPE) RETURNS INTEGER AS $copierContainer$ DECLARE copy_id todolist_container.id%TYPE; BEGIN INSERT INTO todolist_container (name, description, state) ( SELECT 'Copy of ' || name, description, 'draft' FROM todolist_container WHERE id = id_container ); SELECT currval(pg_get_serial_sequence('todolist_container', 'id')) INTO copy_id; INSERT INTO todolist_task (name, description, container_id, milestone, planned, manday, priority) ( SELECT name, description, copy_id, milestone, planned, manday, priority FROM todolist_task WHERE container_id = id_container ); INSERT INTO todolist_container_topic_rel (container_id, topic_id) ( SELECT copy_id, topic_id FROM todolist_container_topic_rel WHERE container_id = id_container ); RETURN copy_id; END; $copierContainer$ LANGUAGE plpgsql; -- Appel : -- SELECT copierContainer(3);