powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Функции в DB2. Разъясните пожалуйста.
3 сообщений из 3, страница 1 из 1
Функции в DB2. Разъясните пожалуйста.
    #36592112
buven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый.
Не могу придумать запрос гуглу, чтобы уяснить для себя один момент.
Есть 2 функции DB2 v.8:
Первая:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE FUNCTION SCHEME.TEST
 (PARAM CHARACTER( 1 )
 ) 
  RETURNS CHARACTER( 1 )
  LANGUAGE SQL
  NOT DETERMINISTIC
  READS SQL DATA
  STATIC DISPATCH
  CALLED ON NULL INPUT
  EXTERNAL ACTION
  INHERIT SPECIAL REGISTERS
  Begin ATOMIC
    declare VAL varchar( 1 );
    set VAL=PARAM;
    IF VAL='Y' then
      set VAL='N';
     end if;
	IF VAL<>'Y' then 	  
      set VAL = ( select class from SCHEME.CLASSES);
      
    end if;
return VAL;
  end;
Вторая:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE FUNCTION SCHEME.TEST_1
 (PARAM CHARACTER( 1 )
 ) 
  RETURNS CHARACTER( 1 )
  LANGUAGE SQL
  NOT DETERMINISTIC
  READS SQL DATA
  STATIC DISPATCH
  CALLED ON NULL INPUT
  EXTERNAL ACTION
  INHERIT SPECIAL REGISTERS
Begin ATOMIC
 declare VAL varchar( 1 ); 

  set VAL=PARAM;
 IF VAL='Y'
   then set VAL='N'; 
   else set VAL = (select class from SCHEME.CLASSES); 

end if;
return VAL;
end;
Вызов второй:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select SCHEME.TEST_1(char('Y')) from table(values( 1 )) t1
completed successfully.

 1   
-  
N  

 1  row selected in  0 . 01  secs.
Вызов первой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select SCHEME.TEST(char('Y')) from table(values( 1 )) t1
[IBM][CLI Driver][DB2/NT] SQL0811N  Результат скалярной полной выборки, оператора SELECT INTO или оператора VALUES INTO 
- больше одной строки таблицы.  SQLSTATE= 21000 

 1   
-  

 0  rows selected because of ERROR.

Понятно, что в запросе к SCHEME.CLASSES возвращается несколько значений, но почему в первой функции происходит проверка всех условий?
Ткните пожалуйста где почитать или разъясните в 2-х словах.



Проводить жизнь в ожидании мессии, который придёт и спасёт мир, всё-равно, что ждать палку в тетрисе.
Даже если и появится, то ты к тому времени наберёшь такую гору дерьма, что те будет уже абсолютно пох... :)
...
Рейтинг: 0 / 0
Функции в DB2. Разъясните пожалуйста.
    #36592208
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В первой функции TEST сначала присваивается значение N переменной PARAM. Поэтому срабатывает и второе условие, которое селектит из SCHEME.CLASSES. А в этой таблице очевидно несколько строк.

Во сторой функции SCHEME.TEST_1 - селект из SCHEME.CLASSES не срабытывает. Ну и ошибки нет.

Наверное у вас глаз замылился.
...
Рейтинг: 0 / 0
Функции в DB2. Разъясните пожалуйста.
    #36592231
buven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже замылился, спасибо:)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Функции в DB2. Разъясните пожалуйста.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]