Неужели есть разница SQL в ФБ 1.5.2 на под Линукс и Виндой?

Совместимость InterBase, Firebird, Yaffil между собой и по версиям

Модераторы: kdv, Alexey Kovyazin

Ответить
Georgi-47
Сообщения: 51
Зарегистрирован: 01 ноя 2004, 10:21

Неужели есть разница SQL в ФБ 1.5.2 на под Линукс и Виндой?

Сообщение Georgi-47 » 22 июн 2005, 17:53

Базы почти одинаковые по данным (копии рабочей базы с интервалом в неделю-другую). Абсолютно одинаковые по структуре. На обоих стоит ФБ 1.5.2 (билд, правда, не уверен, что одинаковый)

Запрос работает на сервере под виндами, не работает под линуксом. И еще работает на рабочем ФБ 1.0 по ФриБСД

Вот запрос, в этом варианте он работает везде. В оригинальном варианте отсутствует выделенное поле в select и в group by, тогда он не работает под Линуксом, на условие по этому полю в having ругается. Оригинальный вариант много лет работает на рабочем сервере, интересно только как она вообще с having разбирается, если этого поля не было.

Кстати, и ругается он как-то странно, у меня говорит password required, из прикладной программы - invalid expression in the HAVING clause (neither an agregate function nor a part of the GROUP BY cllause), что, собственно и было. Вот только извечный вопрос - Как Оно Раньше Работало?

select ot.full_name, rl.identrab, sum(distinct rl.vrem), u.pol

from STAFL_GETDOWN_ID_LVL (2637,-1) ST
join st_afl ot on ot.id_podraz=st.id_get
join pers_main_hist pmh on pmh.podraz_id=ot.id_podraz
join pers_main_tmp pmt on pmt.id_pers=pmh.id_pers
join zrlr rl on rl.kodpodr starting '128' and rl.otchper=:OtchPer
and rl.identrab=pmt.identrab
/* здесь условие почикано ввиду неприлично большого размера, к
вопросу, имхо, отношения не имеет */
join zukr u on u.identrab=rl.identrab

group by ot.full_name, rl.identrab, u.pol

having

(u.pol='M' and formatfloat(sum(distinct r102.vrem),2) >= (select hours_qtty/60 from calendar where year_=:Year_ and month_=:Month_ ))
or
(u.pol='W' and formatfloat(sum( distinct r102.vrem),2) >= (select hours_qtty36/60 from calendar where year_=:Year_ and month_=:Month_ ))

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 22 июн 2005, 18:20

как именно оно раньше работало - тебе виднее. Запрос абсолютно некорректный, на что и показывает тебе FB 1.5. Почему у тебя выдает "password required" - потому что стоит левый клиент или устаревший firebird.msg. Почему запрос работает под виндами - это, извини, фигня. Либо ты все-таки там запускаешь 1.0, либо билды заметно отличаются. Никакой функциональной разницы между портами под разные платформы нет и быть не может.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 22 июн 2005, 18:42

Если это внутри SP, то многие варианты некорректного BLR, скомпилённого под старыми версиями будет жить припеваючи и переживать b/r. До первой попытки альтера этой SP. Это што, я у себя пару лет назад обнаружил триггер, созданный лет 10 назад под IB4, в котором выполнялся апдейт другой таблицы, с условием в where по полям, которых в той таблице никогда не было :) И ведь как-то работал и что-то делал... Исправил и получил расхождение в данных - оказывается автор этой подсистемы, почуяв, что что-то не срастается, этой лажи в триггере не нашёл и, недолго думая, присобачил правильный апдейт дополнительно в приложении, так что после моего улучшения ситуации апдейт стал идти два раза :)

Georgi-47
Сообщения: 51
Зарегистрирован: 01 ноя 2004, 10:21

Сообщение Georgi-47 » 23 июн 2005, 12:01

Сейчас еще раз проверил - на обоих 1.5 НЕ работает.
Видимо, вчера я все-таки запутался в базах. Сорри, вроде специально перепроверял перед отправкой в форум.
На 1.0 работает и выдает устраивающие бухгалтеров данные :)

Данилов Юрий
Сообщения: 31
Зарегистрирован: 27 окт 2004, 11:56

Сообщение Данилов Юрий » 23 июн 2005, 14:16

Georgi-47 писал(а):На 1.0 работает и выдает устраивающие бухгалтеров данные :)
Бухов всегда всё устраивает, если сумма колонки отчета с "итого" сошлась на калькуляторе :-).
Неделю назад мои юзеры попросили исправить счет-фактуру, в которой НДС был обозначен 18%, а сумма НДС считалась при этом из 20%.
Я с себя вины не снимаю, но их полтора года все устраивало :-).

Ответить