![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вам такой запрос???
Карелин Артем © (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 за цикл - вытолкнет последнюю строку