Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Список значений во вход. параметре хр. процедуры, Использ. списка значений во вх. пар-ре 
:(
    Опции темы
samalex
Дата 1.7.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.7.2010

Репутация: нет
Всего: нет



Уважаемые знатоки!!! Работаю в Firebird 2.1.
Хочу передать в хр. процедуру строковый параметр (типа "1, 2, 3") для использования его в конструкции "in (...)".
Вот скрипт для создания ХП.

Код

create or alter procedure SP_2 (
ID_TYPE_WORK_SET varchar(10))
returns (
ID_PREPARATION_TECH_DOC integer,
ID_TYPE_WORK integer)
as
begin
for select
dp.id_preparation_tech_doc,
dp.id_type_work
from data_preparation_tech_doc dp
where
dp.id_type_work in (:ID_TYPE_WORK_SET)
into
:id_preparation_tech_doc,
:id_type_work
do
suspend;


Хочу выбрать набор данных в соответствии с перечисленными через запятую значениями типа "int".
Но что-то не выходит. Не воспринимает Firebird мой параметр.
Кто мне подскажет, что не так?
Заранее благодарен.


Модератор: Пользуйтесь тегами КОД

Это сообщение отредактировал(а) Akella - 1.7.2010, 21:47
PM MAIL   Вверх
Frees
Дата 1.7.2010, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 1
Всего: 54



можно так
Код

CREATE OR ALTER PROCEDURE SP_2 (
    ID_TYPE_WORK_SET VARCHAR(10))
RETURNS (
    ID_PREPARATION_TECH_DOC INTEGER,
    ID_TYPE_WORK INTEGER)
AS
DECLARE VARIABLE SQL_TEXT VARCHAR(1000);
BEGIN
  SQL_TEXT = '
    FOR SELECT
      DP.ID_PREPARATION_TECH_DOC,
      DP.ID_TYPE_WORK
    FROM DATA_PREPARATION_TECH_DOC DP
    WHERE
    DP.ID_TYPE_WORK IN (' || :ID_TYPE_WORK_SET || ')';
  FOR EXECUTE STATEMENT SQL_TEXT
  INTO :ID_PREPARATION_TECH_DOC, :ID_TYPE_WORK
  DO
   SUSPEND;
END

тут есть ограничение, в in максимум 1500 элементов 




--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Akella
Дата 1.7.2010, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



это было в FB 2.0, в 2.1 возможно, что уже больше, нужно читать Release Notes по FB конкретной версии
PM MAIL   Вверх
Frees
Дата 2.7.2010, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 1
Всего: 54



еще в 2.1 появилась функция LIST может есть и обратная ей.
Я для таки целей использую сохраненку - ей на вход цифры через запятую она выдает каждую цифру отдельной записью

Это сообщение отредактировал(а) Frees - 2.7.2010, 06:56


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
samalex
Дата 2.7.2010, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.7.2010

Репутация: нет
Всего: нет



Цитата(Frees @ 1.7.2010,  12:24)
можно так
Код

CREATE OR ALTER PROCEDURE SP_2 (
    ID_TYPE_WORK_SET VARCHAR(10))
RETURNS (
    ID_PREPARATION_TECH_DOC INTEGER,
    ID_TYPE_WORK INTEGER)
AS
DECLARE VARIABLE SQL_TEXT VARCHAR(1000);
BEGIN
  SQL_TEXT = '
    FOR SELECT
      DP.ID_PREPARATION_TECH_DOC,
      DP.ID_TYPE_WORK
    FROM DATA_PREPARATION_TECH_DOC DP
    WHERE
    DP.ID_TYPE_WORK IN (' || :ID_TYPE_WORK_SET || ')';
  FOR EXECUTE STATEMENT SQL_TEXT
  INTO :ID_PREPARATION_TECH_DOC, :ID_TYPE_WORK
  DO
   SUSPEND;
END

тут есть ограничение, в in максимум 1500 элементов

Интересный подход. Спасибо большое.
Никогда не использовал в хп.
Нужно попробовать.

Цитата

можно так
Код

CREATE OR ALTER PROCEDURE SP_2 (
    ID_TYPE_WORK_SET VARCHAR(10))
RETURNS (
    ID_PREPARATION_TECH_DOC INTEGER,
    ID_TYPE_WORK INTEGER)
AS
DECLARE VARIABLE SQL_TEXT VARCHAR(1000);
BEGIN
  SQL_TEXT = '
    FOR SELECT
      DP.ID_PREPARATION_TECH_DOC,
      DP.ID_TYPE_WORK
    FROM DATA_PREPARATION_TECH_DOC DP
    WHERE
    DP.ID_TYPE_WORK IN (' || :ID_TYPE_WORK_SET || ')';
  FOR EXECUTE STATEMENT SQL_TEXT
  INTO :ID_PREPARATION_TECH_DOC, :ID_TYPE_WORK
  DO
   SUSPEND;
END

тут есть ограничение, в in максимум 1500 элементов




Интересный подход. Спасибо большое.
Никогда не использовал в хп.
Нужно попробовать.

PM MAIL   Вверх
Deniz
Дата 19.7.2010, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Смотри тынц и след. пост.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0613 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.