powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / функция для конвертации списка в таблицу
8 сообщений из 8, страница 1 из 1
функция для конвертации списка в таблицу
    #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
функция для конвертации списка в таблицу
    #33953573
poiuytr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно сделать конвертирующую процедуру, но из процедуры потом не сделать селекта
Код: plaintext
select * from table(f_list2table('1, 2, 3')) tmp@
, а из функции можно.
...
Рейтинг: 0 / 0
функция для конвертации списка в таблицу
    #33954293
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читайте кулинарную книжку с http://mysite.verizon.net/Graeme_Birchall
...
Рейтинг: 0 / 0
функция для конвертации списка в таблицу
    #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
функция для конвертации списка в таблицу
    #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
функция для конвертации списка в таблицу
    #33954778
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
poiuytr
Я уже искал по строке "returns table" и ничего подходящего не увидел. На что обратить внимание?

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

Если без рекурсии, то пишите UDF на C или Java.
...
Рейтинг: 0 / 0
функция для конвертации списка в таблицу
    #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
функция для конвертации списка в таблицу
    #33955368
poiuytr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / функция для конвертации списка в таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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