Текущий архив: 2004.02.13;
Скачать: CL | DM;
Вниз
Исполнение процедуры в FB Найти похожие ветки
← →
onix (2004-01-21 14:48) [0]Доброго времени суток.
Не укажите ли на неточность в следующем тексте.
CREATE PROCEDURE EP_COPYTIMETABLE (
GROUPS INTEGER
) AS
declare variable ID integer;
declare variable DISC integer;
declare variable DAY_ integer;
declare variable PAIR integer;
declare variable DATA date;
declare variable TEACHER integer;
declare variable TYPELESSON integer;
begin
for select ID,DISCIPLINE, DAYS, PAIRNUM, DATA
from EP_TIMETABLE
where GROUPS=:GROUPS and US_="T" and DAYS<8
into :ID, :DISC, :DAY_, :PAIR, :DATA
do
BEGIN
insert into EP_TIMETABLE
values (gen_id(timetable_id, 1), :GROUPS, :DISC, :DAY_+7, :PAIR, :DATA, "T");
select IDTEACHER, IDTYPELESSON from EP_TEACHERTIMETABLE
where IDTIMETABLE = :ID
into :TEACHER, :TYPELESSON;
insert into ep_teachertimetable
values (gen_id(teachertimetable_id, 1), :teacher, gen_id(timetable_id, 0), :typelesson);
SUSPEND;
END
end
Все работает только один раз при первом проходе. Хотя под отладчиком видно, что цикл работает, да и генераторы тоже увеличиваются. А вот значения не прописываются.
Удачи и процветания Дмитрий
← →
Johnmen (2004-01-21 14:54) [1]По-моему, серьёзный подводный камень - модифицировать таблицу на основании полученных только что из нее данных. В данном случае, SELECT... и INSERT... в одной связке...
← →
onix (2004-01-21 15:47) [2]>Johnmen © (21.01.04 14:54) [1]
Ну тогда посоветуйте пути решения проблемы
← →
Desdechado (2004-01-21 15:54) [3]сначала объясните логику того, что вы делаете и зачем такие выверты...
← →
Deniz (2004-01-22 07:04) [4]Еще, как маленькое дополнение, после insert into EP_TIMETABLE и до values указать явный список поле.
+ > Johnmen © (21.01.04 14:54) [1] SELECT... и INSERT... в одной связке..., точнее
for select ... from t into ... do
insert into t ...
не понятная конструкция, и что этим надо добиться, видно только, что добавляется почти идентичная запись, исключение 2 поля ID и DAYS. Или даже одно, ведь ID не информационное, а просто сурогатный ПК. Зачем?
← →
onix (2004-01-22 09:35) [5]Есть расписание занятий для одной недели. Каждое занятие может проводить 1 и более преподов.
ID в timetable = idtimetable в teachertimetable
Нужно скопировать расписание этой недели в расписание второй недели с привязками преподов, поскольку в реале они почти совпадают, за исключением нескольких занятий. Ведь легче поправить, чем лупить по клавишам два раза одно и тоже.
← →
Johnmen (2004-01-22 09:48) [6]>onix
Это начало разработки или конец ?
← →
onix (2004-01-22 18:09) [7]>Johnmen © (22.01.04 09:48) [6]
Уже КОНЕЦ. Проблему удалось решить с помощью 2-х ХП, не очень нравиться, но работает. Проект переделал с MS SQL, там похожая конструкция работала нормально.
← →
jack128 (2004-01-22 19:07) [8]
> onix (22.01.04 18:09) [7]
Я думаю тебе стоит почитать про нормализацию..
Вообще если в базе очень много одинаковых данных(как у тебя -расписание предметов) - это уже повод призадуматься.
ИМХО, лудше бы сделать примерно так:
(сделано в предположении, что расписание предметов НЕ меняется, меняются только преподаватели)
table A
таблица расписание - содержит 7дней* кол-во групп записей
id, группа, предмет, день, аудитория и тд..
table B
таблица учители
id, ФИО, предмет
table C
связь между учителями и теми днями, в которые они ведут предметы
id, id учителя, id из таблицы расписания, дата занятия.
В этом случае для того, чтобы указать, что какой то препод ведет некий предмет, нужно только добавить запись в таблицу С.
← →
P.N.P. (2004-01-22 22:22) [9]А может SUSPEND перенести?
...
END
SUSPEND;
end
Страницы: 1 вся ветка
Текущий архив: 2004.02.13;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.009 c