Будет ли ошибка, сгенерированная при выполнении динамического sql, обнаружена в блоке исключений? - PullRequest
1 голос
/ 13 июля 2011

У меня есть ситуация, когда сайт, который я обслуживаю, вызывает пакет / процедуру plsql (Oracle 11g). Процедура создает строку динамического sql с использованием переданных параметров (вызовите строку «v_select»). После того, как строка построена, курсор ref открывается с помощью динамической строки sql v_select. Псевдокод ниже.

OPEN ref_cursor FOR v_select
USING  variables set to input parameters ;

Теперь у процедуры есть блок исключений (КОГДА ДРУГИЕ) для перехвата любых исключений. В блоке исключений все ошибки записываются в таблицу в БД. Когда происходит ошибка во время выполнения динамического sql, кажется, что ошибка не перехватывается блоком исключений (запись не вставляется в таблицу ошибок), но я вижу ошибку на уровне .net, поэтому я знаю, это ошибка Oracle номер_ошибки.

Итак, наконец, мой вопрос заключается в следующем ... из того, что я вижу в сети (что было немного), если динамический sql задыхается, это должно быть перехвачено блоком исключения. Это правильно?

1 Ответ

4 голосов
/ 13 июля 2011

Эта ошибка обычно не обнаруживается до тех пор, пока запрос фактически не будет выполнен, что может не произойти, пока вы не попытаетесь извлечь первую строку из курсора. Сгенерированный SQL корректен логически и синтаксически; он просто выполняет преобразование типов, которое недопустимо для некоторых строк в вашей базе данных. Таким образом, ошибка не перехватывается в хранимой процедуре; когда хранимая процедура завершена, этого еще не произошло.

Это не имеет ничего общего с динамическим запросом. Не динамическая версия того же запроса все равно не выдаст ошибку, пока вы не извлечете курсор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...