Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

Процедуры в 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.023 c
1-1081310776
Russko
2004-04-07 08:06
2004.04.25
Местонахождения исполняемого файла


1-1081521674
denis_group
2004-04-09 18:41
2004.04.25
Проблема с определением HDD (GetDriveType)


1-1081268682
Grel0m
2004-04-06 20:24
2004.04.25
edit и мемо


3-1080587672
clickmaker
2004-03-29 23:14
2004.04.25
ADOConnection time out при попытке создания >2 соединений


1-1081256890
Questioner
2004-04-06 17:08
2004.04.25
Быстрое создание PopupMenu