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

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

Как вам такой запрос???


Карелин Артем ©   (2002-11-15 11:02:00) 

Начинаю разбираться с хранимыми процедурами в FireBird. Для выбора сразу из двух таблиц сделал такое:
.....
RETURNS (
WID INTEGER,
WNAME VARCHAR (100),
...
кусь-кусь
...
BEGIN
FOR SELECT WID,WNAME,W_AID,WTYPE,WBIK,WINN,WOKONX,WOKPO,WDAT_REC,WFLAG_I,WTEL,WPRIM,WUL,WZIP,KOD_REG,KOD_INS,WPASS_NOM,WPASS_SER,WPASS_KEM
FROM WLAD where wflag_i<>3
INTO :WID,:WNAME,:W_AID,:WTYPE,:WBIK,:WINN,:WOKONX,:WOKPO,:WDAT_REC,:WFLAG_I,:WTEL,:WPRIM,:WUL,:WZIP,:KOD_REG,:KOD_INS,:WPASS_NOM,:WPASS_SER,:WPASS_KEM
DO
FOR SELECT AID,APARENT,ANAME,ADAT_REC,AFLAG_I
FROM ADRESS where aid=:w_aid and kod_reg=:kod_reg and kod_ins=:kod_ins
INTO :AID,:APARENT,:ANAME,:ADAT_REC,:AFLAG_I
DO
BEGIN
if (AFLAG_I<>3) then
SUSPEND;
END
END

Можно ли как-то оптимизировать такую процедуру?

Все работает, только не знаю как из второй таблицы выбирать только последнее значени, если select может выбрать несколько значений.
Как выбрать последнее значение из набора данных в хранимой процедуре???
З.Ы. Только функциональность должна оставаться такой же.


Карелин Артем   (2002-11-20 15:14:00) [1]

Вообще-то когда по дате, когда по коду...
Тут это не показано...


Victor_Cr   (2002-11-20 15:11:00) [2]

А по какому принципу выбираеться последняя запись (дата, уникальный код)?


Карелин Артем   (2002-11-20 13:27:00) [3]

Ничего не придумал, кроме как во втором селекте сделать сортировку в обратном порядке и выбирать только первую запись. Select top(1) from... А от второго For избавиться.


Карелин Артем   (2002-11-20 12:53:00) [4]

DO
BEGIN
if (AFLAG_I<>3) then
SUSPEND;
END
END

Ежели вынести if (AFLAG_I<>3) then SUSPEND; за следующий енд, то мой любимый EMS ругается на ошибку.
Ничего не придумал, кроме как между бегином и ендом вставить ничего не делающую строку типа id=:id. Но это некорректно с точки зрения логики.
Ваши комментарии......


Romkin   (2002-11-15 11:40:00) [5]

вынеси suspend за цикл - вытолкнет последнюю строку


Наверх

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