Оператор вставки JDBC не работает

Процедуры не допускаются в операторах SQL, потому что смешивание декларативных и императивных стилей программирования сбивает с толку.

SQL-оператор - это список условий - Oracle может решить, как создать набор результатов, который соответствует эти условия. Хранимая процедура PL / SQL представляет собой набор инструкций, которые изменяют вещи очень предсказуемым образом.

В приведенном ниже примере сколько раз должно выполняться pr? Выполняется ли оно до или после id = 1? Если операторы SQL имели предопределенный порядок, то оптимизатор не смог бы превзойти предикаты, объединить подзапросы и т. Д., А производительность была бы неприемлема.

select *
from table1
where id = 1
    and pr;

Даже если процедура была использована в select, это может не иметь смысла. Например, список select внутри exists всегда игнорируется.

select * from dual where exists (select pr from dual);

Но на самом деле SQL-предложения иногда должны взаимодействовать с внешним миром, и необходима некоторая процедурная логика , Функции разрешены, потому что они обычно просто что-то вычисляют и возвращают значение. Функции обычно не зависят от состояния программы и имеют множество побочных эффектов. Ваши функции могут использовать переменные сеанса, обновлять таблицы (если они установлены на PRAGMA AUTONOMOUS TRANSACTION), установить контекст и т. Д. Oracle не может помешать вам выполнять эти действия, но запрет процедур в операторах SQL будет по крайней мере, обескуражить такой код.

0
задан Toon Krijthe 28 September 2012 в 04:47
поделиться