Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизПроцедуры в IB (Firebid 1.0.0.2) Найти похожие ветки
← →
YuRock © (2004-03-26 13:06) [0]Уважаемые мастера! Прошу прощенья за скорее всего простой вопрос, но все же...
Я хочу получить в результате выполнения процедуры таблицу, а у меня не получается. Если можно - пошлите на ссылку полезную :), или просто подскажите, как сделать.
Я делаю примерно так (есть ошибки, которые я и прошу Вас помочь мне исправить):
RECREATE PROCEDURE GET_LOST_CHECKNUMBERS(
TERMINAL_ID SMALLINT,
SHIFT_FROM INTEGER,
SHIFT_TO INTEGER,
) AS
BEGIN
SELECT * FROM LOST_CHECKNUMBERS
WHERE TERMINAL_ID = :TERMINAL_ID
AND SHIFT_ID >= :SHIFT_FROM
AND SHIFT_ID <= :SHIFT_TO;
END
Затем хочу вызвать примерно так (возможно, тоже не правильно):
EXECUTE PROCEDURE GET_LOST_CHECKNUMBERS 4004, 98, 98
Спасибо.
← →
Johnmen © (2004-03-26 13:09) [1]FOR SELECT ... INTO ... DO SUSPEND;
И про выходные параметры не забыть.
Всё это есть в стандартной документации.
← →
Карелин Артем © (2004-03-26 13:09) [2]И вместо звезды явно перечисляй поля.
← →
YuRock © (2004-03-26 13:10) [3]Да. Прошу не обращать внимания на запятую после 4-й строки (на самом деле ее нет).
А ошибка в конце SELECT"а - на ";" ругается.
← →
Digitman © (2004-03-26 13:11) [4]
> хочу получить в результате выполнения процедуры таблицу,
> а у меня не получается
и не получится, потому что это невозможно
но возможно получить набор данных (НД) с открытым курсором в нем
см. [1]
← →
YuRock © (2004-03-26 13:12) [5]Не успел вопрос задать - уже ответили!
Большое спасибо!
← →
Карелин Артем © (2004-03-26 13:14) [6]После INTO перечисляй выходные параметры. Перед каждым двоеточие. Для такой процедуры Suspend не нужен. Еще желательно ограничить Select условием first(1), потому как в таком случае возвращается 1 запись максимум.
← →
Johnmen © (2004-03-26 13:18) [7]>Карелин Артем © (26.03.04 13:14) [6]
>Для такой процедуры Suspend не нужен.
Почему же ?
← →
Карелин Артем © (2004-03-26 13:36) [8]Johnmen © (26.03.04 13:18) [7]
Потому чтоЗатем хочу вызвать примерно так (возможно, тоже не правильно):
EXECUTE PROCEDURE GET_LOST_CHECKNUMBERS 4004, 98, 98
← →
Карелин Артем © (2004-03-26 13:39) [9]Надо автору вызывать через select, тогда никаких First не надо, а suspend надо
← →
Johnmen © (2004-03-26 13:43) [10]>Карелин Артем ©
>Потому что
>...
Что надо автору - неясно. Но с большей вероятность я предположил, что получить НД.
← →
YuRock © (2004-03-26 13:49) [11]> Johnmen © (26.03.04 13:43) [10]
> Карелин Артем
Мне как-раз через select и надо. Не надо спорить. Я просто раньше никогда не работал так - потому и вопрос задал некорректно.
← →
Digitman © (2004-03-26 14:29) [12]
> YuRock © (26.03.04 13:49) [11]
> Мне как-раз через select и надо
чего городишь-то ? ты же сам ЯВНО указал требуемый тебе метод использования
EXECUTE PROCEDURE GET_LOST_CHECKNUMBERS 4004, 98, 98
никаким "через select" здесь не пахнет, и это означает, что НД тебе не нужен
а если бы нужен был, то вызов проц-ры выглядел бы совсем иначе
SELECT * FROM GET_LOST_CHECKNUMBERS(4004, 98, 98)
вот при таком раскладе в теле процедуры и нужны будут и INTO и SUSPEND
← →
Digitman © (2004-03-26 14:35) [13]
> YuRock
тебе сейчас следует понять главное : есть процедуры, которые ничего не возвращают (1), которые возвращают просто некие значения (2) и которые возвращают НД (при этом открывают курсор управления этим НД для использования на кл.стороне) (3)
в случае (2) SUSPEND не нужен, в случае (3) - обязателен
в случае (2) обращение к процедуре осуществляется по EXECUTE PROCEDURE, в случае (3) - по SELECT..FROM ИМЯ_ПРОЦЕДУРЫ
← →
YuRock © (2004-03-26 16:47) [14]> Digitman
Спасибо. Я уже со всем давно разобрался. Просто до утра сегодняшнего дня мне не приходилось сталкиваться с конструкцией типа SELECT..FROM ИМЯ_ПРОЦЕДУРЫ, по-этому и в теме я неверно написал вызов. Извините.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.032 c