Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятки с исключениями 
:(
    Опции темы
suomi
Дата 16.7.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



Ребят, подскажите плз почему Java себя так ведет.

Есть ф-ция возвращающая строку и в качестве параметра принимающая номер служащего
Код

CREATE OR REPLACE FUNCTION get_fio2 (empno_in IN emp.empno%TYPE)
   RETURN emp.ename%TYPE
IS
   --no_valid_fio   EXCEPTION;
   --PRAGMA EXCEPTION_INIT (no_valid_fio, -20090);
   fio_out   emp.ename%TYPE;
BEGIN
   SELECT NVL (ename, '0')
     INTO fio_out
     FROM emp
    WHERE empno = empno_in;

   IF fio_out = '0'
   THEN
      raise_application_error (-20060, 'Ф.И.О. недоступно!');
   --RETURN 0;
   ELSE
      RETURN fio_out;
   END IF;
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
       raise_application_error (-20090, 'Ф.И.О. недоступно!');
END;
/




Вот кусок кода клиента на Java вызывающий эту функцию

Код

Statement st = cn.createStatement();
String sql = "{? = call get_fio2(?)}";
CallableStatement cst = cn.prepareCall(sql);
cst.setInt(2,778);
cst.registerOutParameter(1,Types.VARCHAR);
cst.execute();
System.out.println("Результат запроса: "+cst.getString(1));


Непонятки возникают если задать номер клиента которого нету!
Результат таков:
java.sql.SQLException: ORA-20090: Ф.И.О. недоступно!

Однако по логике должно быть

java.sql.SQLException: ORA-20060: Ф.И.О. недоступно!


Есть кто в теме почему так? подозрения что функция NVL просто игнорируется! smile 
PM MAIL   Вверх
LSD
Дата 17.7.2007, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(suomi @  16.7.2007,  23:09 Найти цитируемый пост)
Непонятки возникают если задать номер клиента которого нету!
Результат таков:
java.sql.SQLException: ORA-20090: Ф.И.О. недоступно!

Однако по логике должно быть

java.sql.SQLException: ORA-20060: Ф.И.О. недоступно!


Есть кто в теме почему так? подозрения что функция NVL просто игнорируется!

NVL тут ни при чем. С с чего бы это там должно быть ORA-20060? Ты делаешь запрос который должен вернуть одну строку, если он не возвращает ни одной строки, то вызывается NO_DATA_FOUND exception. NVL тебе поможет если поле ename не заполнено, но и только.

Модератор: перемещено из Java: Общие вопросы .


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
fixxer
Дата 17.7.2007, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: нет
Всего: 27



Цитата(suomi @ 16.7.2007,  22:09)
Непонятки возникают если задать номер клиента которого нету!
Результат таков:
java.sql.SQLException: ORA-20090: Ф.И.О. недоступно!

Однако по логике должно быть

java.sql.SQLException: ORA-20060: Ф.И.О. недоступно!

Странная у Вас, однако, логика. Если задать несуществующий id, то не выберется ни одной записи. NVL применять просто не к чему, и процедура честно проваливается в WHEN NO_DATA_FOUND. И тем более непонятно причем тут java. SQL, причем основы.

Упс, опоздал.

Это сообщение отредактировал(а) fixxer - 17.7.2007, 09:30


--------------------
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0662 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.