Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > вопрос по типу данных:DATE в IBExpert


Автор: Cheshuya 5.5.2006, 13:52
Здравствуйте... 
У меня есть 2 таблицы ,допустим таблицы One и Two. Таблица One содержит 5 колонк одна из колонок этой таблицы содержит тип :DATE. При выполнении запроса происходит выборка из таблицы Two, и заполнение таблицы One записями для соответствующих колонок этой таблицы. 

Вот примерный кусок процедуры .... 

if (........) 
then 
begin 
select(.......) 

pole_int1=0; 
pole_smallint2=0; 

if(exists(select * from Two where pole=:pole and pole1=:pole1 
and pole3=:pole3 PLAN(Two INDEX(FIND_ALL)))) 
then 
begin 
select max(PoleDATE),count(*),sum(perem) from Two where 
pole=:pole and pole1=:pole1 and pole3=:pole3 PLAN(Two INDEX 
(FIND_ALL)) into :DATEpole,:pole_int1,:pole_smallint2; 
end 
end 

при прохождении первого условия заполняются поля которые на сто порцентов имеют значения в таблице Two, а на втором условии могут встретиться записи с пустыми полями, и тут запрос не должен пройти. 
Если второе условие не проходит то в значения полей заносятся значения переменных описанные перед вторым условием pole_int1=0; pole_smallint2=0;(тоесть нули)(Это то что мне надо)... 

И у меня вот такой вопрос... 

А как быть со значение поля для колонки с типом DATE? 
Если второе условие не проходит то возвращается послдняя дата из :DATEpole...
 
 

Автор: Fazil6 5.5.2006, 14:04
Цитата

А как быть со значение поля для колонки с типом DATE? 
Если второе условие не проходит то возвращается послдняя дата из :DATEpole...

Ничего не понятно, по русски можно это написать? 
Задай значение для Date точно также как для pole_int1 или любого другого
По твоему коду если второе условие (я понимаю, что имеется в виду это) 
Код

if(exists(select * from Two where pole=:pole and pole1=:pole1 
and pole3=:pole3 PLAN(Two INDEX(FIND_ALL)))) 

не проходит, то процедура заканчивается. Куда ты хоешь вернуть :DATEpole ? 

Автор: Cheshuya 5.5.2006, 15:07
вхожу в цикл...
прохожу первое условие и select (в таблицу One из Two в колнки param1 и param2 записывается первая строка...)
дальше следует еще одно условие  и select(тут должны в таблицу ONE из Two записаться DATEpole,pole_int1 и pole_smallint2)

если условие проходит то эти три значения  записываются в свои поля...
результат

param1|param2|DATEpole|pole_int1|pole_smallint2|
______|______|________|_______|___________|
  1            2          1.2.2006      5                6

следущая итерация ....
заполнились param1 и param2 а второе условие непрошло 
и в полях с DATEpole,pole_int1 и pole_smallint2 остануться значения 
с предыдущей итерации....
во избежании этого я перед вхождением на второе условие зануляю
pole_int1=0; 
pole_smallint2=0; 

а как мне занулить  DATEpole? 
 

Автор: Fazil6 5.5.2006, 16:52
определись с значением по умолчанию и присваивай его в виде литерала даты. Например
Код

DATEpole = '1.1.0001'
 

Автор: Cheshuya 6.5.2006, 09:41
впринципе я думаю это единственное корректное решение.......
спасибо...

был еще вариант с null, но это черевато проблемками при сравнении в будущем...
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)