Хорошо, вопрос довольно расплывчатый, поэтому мой ответ просто опишет различные варианты и что из этого следует.
Опция 0: это хранимая процедура, которая выполняет SELECT и пытается вставить результатв таблицу.
Вариант 1: Подготавливается строка, содержащая текст для CALL procedure()
, которая затем используется для динамического выполнения SQL EXECUTE IMMEDIATE
.
Вариант 2: aпрямой вызов процедуры.
Вариант 3: EXECUTE IMMEDIATE
вызов с блоком команд SQLScript.
Вариант 3 объявления просто не будет работать вообще и приведет к ошибке, поскольку EXECUTE IMMEDIATE
ожидает команду string . Эта командная строка должна быть корректной SQL, что здесь не так. Кроме того, это может быть только одна команда, а не список из нескольких команд.
Как варианты 1 и 2: они практически идентичны с точки зрения производительности. Очевидно, что параметр динамического SQL требует дополнительного разбора и, вероятно, приведет к дополнительным записям в общем кэше SQL, но это должно быть незначительной частью общего времени выполнения вызова процедуры.
Кстати: процедура в варианте 0также не работает - процедура синтаксически неверна в нескольких местах.
Итог: разница в производительности между динамическим вызовом SQL и прямым вызовом для вызова одной процедуры без параметров или возвращаемых значений, вероятно, будет незначительной.