Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / функция для конвертации списка в таблицу / 8 сообщений из 8, страница 1 из 1
30.08.2006, 17:32
    #33953408
poiuytr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для конвертации списка в таблицу
Подскажите как написать функцию для конвертации списка значений в таблицу.

На входе функции строка со значениями, разделенными запятой.
Код: plaintext
fun('1, 2, 3, 4')

На выходе получаю таблицу, в которой содержаться колонка со значениями из строки.
Код: plaintext
1.
2.
3.
4.
5.
id
---
 1 
 2 
 3 
 4 

Пытаюсь так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create function f_list2table
 (p_list varchar( 1024 )
 ) 
  returns table
   (id int
   )
  language sql

  return values  1 ,  2 ,  3 
/* как здесь воспользоваться параметром p_list?*/
	@
Спасибо.
...
Рейтинг: 0 / 0
30.08.2006, 18:16
    #33953573
poiuytr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для конвертации списка в таблицу
Можно сделать конвертирующую процедуру, но из процедуры потом не сделать селекта
Код: plaintext
select * from table(f_list2table('1, 2, 3')) tmp@
, а из функции можно.
...
Рейтинг: 0 / 0
31.08.2006, 08:32
    #33954293
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для конвертации списка в таблицу
Читайте кулинарную книжку с http://mysite.verizon.net/Graeme_Birchall
...
Рейтинг: 0 / 0
31.08.2006, 10:01
    #33954471
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для конвертации списка в таблицу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create function tokenizer(c varchar( 255 ))
returns table (i int)
begin
 return
 with t (c, i) as 
 (
   values 
   (
   substr(c, nullif(posstr(c, ','),  0 )+ 1 ),
   int(substr(c,  1 , coalesce(nullif(posstr(c, ','),  0 ), length(c)+ 1 )- 1 ))
   )
     union all
   select 
   substr(c, nullif(posstr(c, ','),  0 )+ 1 ),
   int(substr(c,  1 , coalesce(nullif(posstr(c, ','),  0 ), length(c)+ 1 )- 1 ))
   from t
   where t.c is not null
 )
 select t.i from t;
end@
...
Рейтинг: 0 / 0
31.08.2006, 11:13
    #33954733
poiuytr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для конвертации списка в таблицу
Mark Barinstein
Предлагаете парсить? Не очень понимаю то, как работает запрос, что вы предложили, дб2 выдает такие ворнинги:
[IBM][DB2/AIX64] SQL0347W The recursive common table expression "T" may contain an infinite loop. SQLSTATE=01605


Victor Metelitsa
Я уже искал по строке "returns table" и ничего подходящего не увидел. На что обратить внимание?
...
Рейтинг: 0 / 0
31.08.2006, 11:23
    #33954778
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для конвертации списка в таблицу
poiuytr
Я уже искал по строке "returns table" и ничего подходящего не увидел. На что обратить внимание?

Вам надо разобраться, как работают рекурсивные запросы. В кулинарной книжке этому уделено много внимания. Когда разберётесь, тогда поймёте, как работает функция, которую опубликовал Марк. Warning - это не ошибка, а здесь, так сказать, приглашение поглубже изучить код.

Если без рекурсии, то пишите UDF на C или Java.
...
Рейтинг: 0 / 0
31.08.2006, 11:50
    #33954911
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для конвертации списка в таблицу
poiuytrПредлагаете парсить? Не очень понимаю то, как работает запрос, что вы предложили, дб2 выдает такие ворнинги:
[IBM][DB2/AIX64] SQL0347W The recursive common table expression "T" may contain an infinite loop. SQLSTATE=01605
Использовать эту функцию так:
Код: plaintext
select * from table(tokenizer('1, 2, 3')) tmp;
Этот пример приведен, если неохота использовать С или Жабу.
А вообще, эффективнее на языках будет.
Но не думаю, что сильно намного...
...
Рейтинг: 0 / 0
31.08.2006, 13:34
    #33955368
poiuytr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для конвертации списка в таблицу
Спасибо за ответы!
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / функция для конвертации списка в таблицу / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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