Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Дмитрий
- Сообщения: 127
- Зарегистрирован: 26 окт 2004, 11:05
Сообщение
Дмитрий » 18 янв 2005, 18:06
Добрый день!
Подскажите, как можно создать в ХП переменную типа массив? Знаю, что такой тип не поддерживается для ХП, но может у кого-то есть мысли, как это сделать? Мне нужна переменная ARRAY = Integer[23].
Спасайте! Лень описывать
Код: Выделить всё
DECLARE VARIABLE ARR1 SMALLINT;
....
DECLARE VARIABLE ARR23 SMALLINT;
[/size]
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 18 янв 2005, 18:36
никак нельзя. из переменных типа array в SQL можно только ВЫБИРАТЬ данные оператором select. Присваивать значения элементам массива можно только через IB API, это описано в документации.
Встречный вопрос - зачем такое количество переменных int нужно в процедуре?
-
Дмитрий
- Сообщения: 127
- Зарегистрирован: 26 окт 2004, 11:05
Сообщение
Дмитрий » 19 янв 2005, 09:30
Да все просто. Есть необходимость написания процедуры, которая проверяет правильность ключа банковского счета. Массив должен содержать произведение весовых коэффициентов на .... (долго описывать). Потом идет обработка массива (алгоритм предоставлен ЦБ РФ). То же относится к вычислению контрольного числа ИНН и т.д.
А что переменных типа "массив" нет - это я уже читал в документации, перед тем, как задать вопрос. Я думал кто-то предложит решение, как это дело организовать (псевдомассив). Типа строки с разделителями или чего-то подобного.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 19 янв 2005, 09:41
а зачем? напиши функцию (udf) обработки blob.
-
Дмитрий
- Сообщения: 127
- Зарегистрирован: 26 окт 2004, 11:05
Сообщение
Дмитрий » 19 янв 2005, 10:36
Да можно и UDF, скорее всего так и сделаю. Просто хотелось реализовать массивы, хотя бы одномерные. Буду думать.
Кстати, а нигде не попадались UDF, которые работают с DBF-форматом? Типа создания, чтения, заполнения DBF файлов?
-
eugeney
- Сообщения: 79
- Зарегистрирован: 29 окт 2004, 18:51
Сообщение
eugeney » 24 янв 2005, 09:40
Дмитрий писал(а):Да все просто. Есть необходимость написания процедуры, которая проверяет правильность ключа банковского счета. Массив должен содержать произведение весовых коэффициентов на .... (долго описывать). Потом идет обработка массива (алгоритм предоставлен ЦБ РФ). То же относится к вычислению контрольного числа ИНН и т.д.
А что переменных типа "массив" нет - это я уже читал в документации, перед тем, как задать вопрос. Я думал кто-то предложит решение, как это дело организовать (псевдомассив). Типа строки с разделителями или чего-то подобного.
Не надо изголяться. Создай таблицу вместо массива где будут храниться значения, при работе процедуры все данные считаються в кеш и никаких замедлений не будет. Это правильный вриант. Еще более правильный напистаь UDF. У меня код есть, но он на Java.
Кстати "(алгоритм предоставлен ЦБ РФ)" это они в официальном источнике или вам лично?
-
Дмитрий
- Сообщения: 127
- Зарегистрирован: 26 окт 2004, 11:05
Сообщение
Дмитрий » 24 янв 2005, 10:57
"(алгоритм предоставлен ЦБ РФ)" это они в официальном источнике или вам лично?
Конечно в официальном.
Проблема решена. Может и не очень хорошо, но работает.
-
LeShik
- Сообщения: 7
- Зарегистрирован: 28 окт 2004, 17:03
Сообщение
LeShik » 24 янв 2005, 17:26
Как то столкнулись с такой проблеммой... Хранили массив в виде строки типа
Код: Выделить всё
Declare variable arr varchar(512);
arr = '1.2.3.4.5.6.7.8.9.10';
т.е. разделять точками ... Для извлечения подстроки можно использовать UDF-ки... Конечно не пик изящества, но если очень хочется, то можно ...
-
Дмитрий
- Сообщения: 127
- Зарегистрирован: 26 окт 2004, 11:05
Сообщение
Дмитрий » 25 янв 2005, 09:22
Почти так и решил. Только вместо точек использую '#'. Текст выглядит ужасно, но что главное, все работает.