Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Процедуры в IB (Firebid 1.0.0.2) [D6, IB6.x]


YuRock ©   (2004-03-26 13:06:00) 

Уважаемые мастера! Прошу прощенья за скорее всего простой вопрос, но все же...

Я хочу получить в результате выполнения процедуры таблицу, а у меня не получается. Если можно - пошлите на ссылку полезную :), или просто подскажите, как сделать.

Я делаю примерно так (есть ошибки, которые я и прошу Вас помочь мне исправить):

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


Спасибо.


YuRock   (2004-03-26 16:47:00) [1]

> Digitman

Спасибо. Я уже со всем давно разобрался. Просто до утра сегодняшнего дня мне не приходилось сталкиваться с конструкцией типа SELECT..FROM ИМЯ_ПРОЦЕДУРЫ, по-этому и в теме я неверно написал вызов. Извините.


Digitman   (2004-03-26 14:35:00) [2]


> YuRock


тебе сейчас следует понять главное : есть процедуры, которые ничего не возвращают (1), которые возвращают просто некие значения (2) и которые возвращают НД (при этом открывают курсор управления этим НД для использования на кл.стороне) (3)

в случае (2) SUSPEND не нужен, в случае (3) - обязателен
в случае (2) обращение к процедуре осуществляется по EXECUTE PROCEDURE, в случае (3) - по SELECT..FROM ИМЯ_ПРОЦЕДУРЫ


Digitman   (2004-03-26 14:29:00) [3]


> 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


YuRock   (2004-03-26 13:49:00) [4]

> Johnmen ©   (26.03.04 13:43) [10]
> Карелин Артем

Мне как-раз через select и надо. Не надо спорить. Я просто раньше никогда не работал так - потому и вопрос задал некорректно.


Johnmen   (2004-03-26 13:43:00) [5]

>Карелин Артем ©
>Потому что
>...

Что надо автору - неясно. Но с большей вероятность я предположил, что получить НД.


Карелин Артем   (2004-03-26 13:39:00) [6]

Надо автору вызывать через select, тогда никаких First не надо, а suspend надо


Карелин Артем   (2004-03-26 13:36:00) [7]

Johnmen ©   (26.03.04 13:18) [7]
Потому что
Затем хочу вызвать примерно так (возможно, тоже не правильно):

EXECUTE PROCEDURE GET_LOST_CHECKNUMBERS 4004, 98, 98


Johnmen   (2004-03-26 13:18:00) [8]

>Карелин Артем ©   (26.03.04 13:14) [6]
>Для такой процедуры Suspend не нужен.

Почему же ?


Карелин Артем   (2004-03-26 13:14:00) [9]

После INTO перечисляй выходные параметры. Перед каждым двоеточие. Для такой процедуры Suspend не нужен. Еще желательно ограничить Select условием first(1), потому как в таком случае возвращается 1 запись максимум.


YuRock   (2004-03-26 13:12:00) [10]

Не успел вопрос задать - уже ответили!

Большое спасибо!


Digitman   (2004-03-26 13:11:00) [11]


> хочу получить в результате выполнения процедуры таблицу,
> а у меня не получается


и не получится, потому что это невозможно
но возможно получить набор данных (НД) с открытым курсором в нем

см. [1]


YuRock   (2004-03-26 13:10:00) [12]

Да. Прошу не обращать внимания на запятую после 4-й строки (на самом деле ее нет).

А ошибка в конце SELECT'а - на ";" ругается.


Johnmen   (2004-03-26 13:09:00) [13]

FORSELECT ... INTO... DO SUSPEND;
И про выходные параметры не забыть.
Всё это есть в стандартной документации.


Карелин Артем   (2004-03-26 13:09:00) [14]

И вместо звезды явно перечисляй поля.


Наверх

Титульная страница Поиск, карта сайта Написать письмо