Официальных тестов для хранимых процедур, таких как TPC for SQL, не существует (см. tpc.org ).Я также не знаю ни одного приложения базы данных с конкретными реализациями PL / SQL и pgSQL, которые можно было бы использовать в качестве эталона.
Оба языка компилируются и оптимизируются в промежуточный код, а затем запускаются интерпретатором.PL / SQL можно скомпилировать в машинный код, который не так сильно повышает общую производительность, как можно подумать, потому что интерпретатор довольно эффективен, и типичные приложения проводят большую часть времени в движке SQL, а не в процедурномкод ( см. статью AskTom ).
Когда процедурный код вызывает SQL, это происходит так же, как и в любой другой программе, с использованием операторов и параметров связывания для ввода и вывода.Oracle может сохранять эти SQL «подготовленными», что означает, что курсоры готовы к повторному использованию без дополнительного «мягкого» анализа SQL (обычно «жесткий анализ» SQL происходит только тогда, когда база данных запускает SQL впервые сэто было начато).
Когда функции используются в выражениях select или where, база данных должна переключаться между SQL и процедурными механизмами.Это может занять больше времени обработки, чем сам код.
Основное различие между этими двумя компиляторами заключается в том, что Oracle поддерживает дерево зависимостей, которое заставляет PL / SQL автоматически перекомпилироваться при изменении базовых объектов.Ошибки компиляции обнаруживаются без фактического запуска кода, что не относится к Postgres ( см. Документация )