Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Как преобразовать входной параметр в хранимой процедуре  [new]
OlegA67
Member

Откуда:
Сообщений: 284
Добрый день.
На вход хранимке передается параметр spin VARCHAR(500).
Где spin может содержать разные значение, но вид примерной такой.
spin = '61000,61001,61005,610006'
И не знаю как запихнуть spin в условие запроса, чтобы выглядело примерно так
.... WHERE in_numbp IN (spin), где поле in_numbp имеет тип INTEGER. Выходит сообщение о несовместимости типов in_numbp и spin.
22 окт 07, 06:27    [4820402]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать входной параметр в хранимой процедуре  [new]
TORT
Member

Откуда:
Сообщений: 1095
declare SQL_CMD varchar(1000);

set SQL_CMD = "select ... from ... where id in ("||spin||")";
ну а дальше EXECUTE IMMEDIATE или PREPARE .... from SQL_CMD....
22 окт 07, 09:29    [4820609]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать входной параметр в хранимой процедуре  [new]
nkulikov
Guest
Может функцию написать в которой делать проверку данной строки да и в Cookbook был запрос по нормализации подобных строк.
22 окт 07, 10:10    [4820805]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать входной параметр в хранимой процедуре  [new]
OlegA67
Member

Откуда:
Сообщений: 284
TORT
declare SQL_CMD varchar(1000);
set SQL_CMD = "select ... from ... where id in ("||spin||")";

Теперь возникли проблеммы, как вывести это в курсор. Такой синтаксис не отрабатывает
DECLARE cursor1 CURSOR WITH RETURN FOR EXECUTE IMMEDIATE SQL_CMD;
22 окт 07, 11:40    [4821412]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать входной параметр в хранимой процедуре  [new]
TORT
Member

Откуда:
Сообщений: 1095
declare c1 cursor for s1;

PREPARE s1 from SQL_CMD;
open c1;
что-то типа этого....
22 окт 07, 11:43    [4821444]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать входной параметр в хранимой процедуре  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
OlegA67
Добрый день.
На вход хранимке передается параметр spin VARCHAR(500).
Где spin может содержать разные значение, но вид примерной такой.
spin = '61000,61001,61005,610006'
И не знаю как запихнуть spin в условие запроса, чтобы выглядело примерно так
.... WHERE in_numbp IN (spin), где поле in_numbp имеет тип INTEGER. Выходит сообщение о несовместимости типов in_numbp и spin.
Добрый день.
Напишите табличную функцию-токенайзер (можно на sql, лучше на c), которая будет разбирать эту строку на фрагменты.
Потом ее можно будет использовать в запросе типа:
select m.*
from my_tab m
join table(tokenizer('61000,61001,61005,610006')) t on m.spin=int(t.token)
where ...
На sql уже была здесь на форуме, если надо на c - пришите, пришлю.
22 окт 07, 16:24    [4823492]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать входной параметр в хранимой процедуре  [new]
TORT
Member

Откуда:
Сообщений: 1095
tokenizer === REXX:)
22 окт 07, 16:28    [4823533]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать входной параметр в хранимой процедуре  [new]
OlegA67
Member

Откуда:
Сообщений: 284
Добрый день Марк.
Создал udf proc.tokenizer на sql, то что написали Вы, а дальше не получается ее прикрутить к своему запросу, так как у мне в условие надо сделать
WHERE in_numb NOT IN ('61000,61001,61005,610006').
как правильно, переделать запрос, то что Вы писали
select m.*
from my_tab m
join table(tokenizer('61000,61001,61005,610006')) t on m.spin=int(t.i)
where ...
23 окт 07, 12:30    [4826739]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать входной параметр в хранимой процедуре  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
Добрый день.
select m.*
from my_tab m
where ...
and m.spin not in
(
select int(t.i)
from table(tokenizer('61000,61001,61005,610006')) t
)
23 окт 07, 12:51    [4826874]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать входной параметр в хранимой процедуре  [new]
OlegA67
Member

Откуда:
Сообщений: 284
Огромное спасибо, все получилось
23 окт 07, 13:21    [4827148]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать входной параметр в хранимой процедуре  [new]
OlegA67
Member

Откуда:
Сообщений: 284
Возник еще один вопрос по хранимке.
На вход передаются несколько параметров, где два из них VARCHAR(8)
(..., IN sved VARCHAR(8), IN kor VARCHAR(8))
И мне эти два парметра надо вставить в запрос в условие WHERE, в зависимости от значения самих параметров. То сеть если sved = '', то условие дожно быть vc_sved IS NULL, В противном случае vc_sved = sved, то же самое и по kor. Пока в голову приходит только использовать конструкцию CASE из 4x веток. С использованием EXECUTE IMMEDIATE , так и не получилось вывести данные в курсор. Буду признателен за советы
24 окт 07, 06:40    [4830723]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать входной параметр в хранимой процедуре  [new]
TORT
Member

Откуда:
Сообщений: 1095
EXECUTE IMMEDIATE используется для команд insert, update, delete.... но не для select...
Для select'а свои конструкции....
24 окт 07, 09:22    [4830959]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить