Ну, это не ни один оператор, но это почти настолько близко, как можно добраться с оракулом:
BEGIN
FOR R IN (SELECT owner, table_name FROM all_tables WHERE owner='TheOwner') LOOP
EXECUTE IMMEDIATE 'grant select on '||R.owner||'.'||R.table_name||' to TheUser';
END LOOP;
END;
Поскольку больше не было ответов, я собираюсь ответить своим решением.
Я решил проблему рекурсии, полностью исключив рекурсию. Использование этой страницы в качестве руководства я переключил весь проект с рекурсивного make на нерекурсивный make. Затем я клонировал цели, связанные с нерекурсивной проверкой (check, check-am, check-TESTS и т. Д.), В новый набор целей для интеграционных тестов. Пока что это работает очень хорошо.
Примечание: вам может быть интересно, почему я просто не клонировал вместо этого рекурсивные цели. Честно говоря, я не смог их найти. Либо я не знал, где искать (правил не было в сгенерированном файле Makefile), либо что-то происходит неявно, и я недостаточно хорошо понимаю автоинструменты, чтобы следовать этому.
Что касается проблемы с .PHONY переопределено, я все еще не нашел решения, кроме как условно исключить другое определение при выполнении интеграционных тестов.
В ваших файлах AM весь синтаксис make передается в сгенерированный файл Makefile. Поэтому, если вам нужна новая цель, просто создайте ее, как в Makefile, и она появится в автоматически созданном Makefile. Поместите в конец ваших AM-файлов следующее:
integration-tests: prerequisites.... commands to run test .PHONY: integration-tests