Страница 1 из 1

Переменная в ХП.

Добавлено: 18 янв 2005, 18:06
Дмитрий
Добрый день!
Подскажите, как можно создать в ХП переменную типа массив? Знаю, что такой тип не поддерживается для ХП, но может у кого-то есть мысли, как это сделать? Мне нужна переменная ARRAY = Integer[23].
Спасайте! Лень описывать

Код: Выделить всё

DECLARE VARIABLE ARR1 SMALLINT;
.... 
DECLARE VARIABLE ARR23 SMALLINT;
[/size]

Добавлено: 18 янв 2005, 18:36
kdv
никак нельзя. из переменных типа array в SQL можно только ВЫБИРАТЬ данные оператором select. Присваивать значения элементам массива можно только через IB API, это описано в документации.

Встречный вопрос - зачем такое количество переменных int нужно в процедуре?

Добавлено: 19 янв 2005, 09:30
Дмитрий
Да все просто. Есть необходимость написания процедуры, которая проверяет правильность ключа банковского счета. Массив должен содержать произведение весовых коэффициентов на .... (долго описывать). Потом идет обработка массива (алгоритм предоставлен ЦБ РФ). То же относится к вычислению контрольного числа ИНН и т.д.
А что переменных типа "массив" нет - это я уже читал в документации, перед тем, как задать вопрос. Я думал кто-то предложит решение, как это дело организовать (псевдомассив). Типа строки с разделителями или чего-то подобного.

Добавлено: 19 янв 2005, 09:41
kdv
а зачем? напиши функцию (udf) обработки blob.

Добавлено: 19 янв 2005, 10:36
Дмитрий
Да можно и UDF, скорее всего так и сделаю. Просто хотелось реализовать массивы, хотя бы одномерные. Буду думать.
Кстати, а нигде не попадались UDF, которые работают с DBF-форматом? Типа создания, чтения, заполнения DBF файлов?

Добавлено: 24 янв 2005, 09:40
eugeney
Дмитрий писал(а):Да все просто. Есть необходимость написания процедуры, которая проверяет правильность ключа банковского счета. Массив должен содержать произведение весовых коэффициентов на .... (долго описывать). Потом идет обработка массива (алгоритм предоставлен ЦБ РФ). То же относится к вычислению контрольного числа ИНН и т.д.
А что переменных типа "массив" нет - это я уже читал в документации, перед тем, как задать вопрос. Я думал кто-то предложит решение, как это дело организовать (псевдомассив). Типа строки с разделителями или чего-то подобного.
Не надо изголяться. Создай таблицу вместо массива где будут храниться значения, при работе процедуры все данные считаються в кеш и никаких замедлений не будет. Это правильный вриант. Еще более правильный напистаь UDF. У меня код есть, но он на Java.
Кстати "(алгоритм предоставлен ЦБ РФ)" это они в официальном источнике или вам лично?

Добавлено: 24 янв 2005, 10:57
Дмитрий
"(алгоритм предоставлен ЦБ РФ)" это они в официальном источнике или вам лично?
Конечно в официальном.

Проблема решена. Может и не очень хорошо, но работает.

Добавлено: 24 янв 2005, 17:26
LeShik
Как то столкнулись с такой проблеммой... Хранили массив в виде строки типа

Код: Выделить всё

 Declare variable arr varchar(512);
 arr = '1.2.3.4.5.6.7.8.9.10';
т.е. разделять точками ... Для извлечения подстроки можно использовать UDF-ки... Конечно не пик изящества, но если очень хочется, то можно ...

Добавлено: 25 янв 2005, 09:22
Дмитрий
Почти так и решил. Только вместо точек использую '#'. Текст выглядит ужасно, но что главное, все работает.