Oracle запрос в процедуре не возвращает результаты - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть этот Pl / sql-запрос в хранимой процедуре Oracle [10g], который вызывается из программы на C # ::1001*

SELECT a,b 
          FROM t1, t2 
         WHERE 
t1.Id=t2.Id
         AND NVL (TO_CHAR (t1.externalId), t2.product_name) = prm_product_name

prm_product_name является входным параметром для процедуры и объявлен как:

prm_product_name VARCHAR2

Приложение передает «1000» или «2000» и т. Д. В качестве значения входного параметра в proc и может успешно получить результаты запроса в моем приложении на C #. Но когда приложение передает определенное число, скажем 1500, запрос не возвращает никаких записей. Я также не вижу никаких исключений оракула в приложении. Когда я изменяю оператор, как показано ниже, перекомпилирую proc, тогда запрос proc возвращает результаты.

AND NVL (TO_CHAR (t1.externalId), t2.product_name) = '1500'

Кроме того, я могу получить результаты из процесса, когда я вызываю его с помощью редактора sql [без жесткого кодирования 1500]. Только когда он вызывается из приложения, он не возвращает результаты. Я не в состоянии понять это поведение и его причину. Не могли бы вы посоветовать, как это работает?

Спасибо.

1 Ответ

0 голосов
/ 01 ноября 2011

Мы ожидаем, что ваша процедура выбросит NO_DATA_FOUND при таких обстоятельствах.

Почему бы и нет?Трудно сказать, не видя код для всей хранимой процедуры, но деньги были бы на плохо реализованном разделе исключений.Нечто подобное, записывающее ошибку, но не распространяющее исключение:

EXCEPTION
    WHEN no_data_found THEN
        write_error_log('no data for Product Name='||prm_product_name);
END;

Или даже страх

EXCEPTION
    WHEN others THEN
        null;
END;

, который проглатывает событие, как будто ошибки никогда не было.

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