Короткий ответ - да, конечно, внутри Oracle есть модуль синтаксического анализа, который интерпретирует текст оператора.Насколько я понимаю, основная часть исходного кода Oracle находится в C.
Для общего ознакомления:
Любой оператор SQL потенциально проходит три этапа, когда Oracle запрашивает его выполнение.Часто управление возвращается клиенту между каждым из этих шагов, хотя детали могут зависеть от конкретного используемого клиента и способа, которым выполняются вызовы.
(1) Parse - я полагаю, что первыйна самом деле действие состоит в том, чтобы проверить, есть ли у Oracle кэшированная копия точного текста оператора.Если это так, это может спасти парсинг вашего утверждения снова.Если нет, он, конечно, должен проанализировать текст, а затем определить план выполнения, который Oracle считает оптимальным для данного оператора.Таким образом, концептуально, по крайней мере, на этом этапе работают две сущности - синтаксический анализатор и оптимизатор.
(2) Выполнить - для оператора SELECT этот шаг, как правило, запускает достаточно плана выполнения, чтобыготов вернуть несколько строк клиенту.В зависимости от деталей плана, это может означать выполнение всей задачи или выполнение небольшой части работы.Для любого другого типа оператора фаза выполнения - это когда вся работа фактически выполнена.
(3) Fetch - это когда строки фактически возвращаются клиенту.Обычно клиент имеет предопределенный размер массива выборки, который устанавливает максимальное количество строк, которые будут возвращены одним вызовом выборки.Таким образом, может быть много выборок, сделанных для одного утверждения.Конечно, если оператор является тем, который не может возвращать строки, тогда не требуется никакого шага извлечения.