Форум: "Базы";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];
ВнизIB. Формирование запроса с расчетом данных по 1 - ой колонке Найти похожие ветки
← →
erika © (2005-07-29 08:24) [0]Здравствуйте!
Возникла проблема: когда я формирую VIEW 3 (на основе двух других VIEW и Table1 - вызываются все поля таблицы удовлетворяющие условию), где производится расчет следующего типа (view1.field1 - view1.field2 - view2.field1 ) field3, и если ранее view1.field1 было null, то field3 получается пустым, и запрос выполняется очень долго, не смотря на то, что в результате запроса появляется всего 100 - 150 записей, максимум 200
← →
Digitman © (2005-07-29 08:41) [1]
> если ранее view1.field1 было null, то field3 получается
> пустым
как можно из ничего вычесть что-то и в результате получить что-то ?
null это и есть "ничто" !
> запрос выполняется очень долго
это уже проблемы грамотного проектирования базы + эффективного использования индексов + оптимизация запросов
← →
erika © (2005-07-29 08:45) [2]а можно вместо ничто view1.field1 поставить 0
← →
Fay © (2005-07-29 08:47) [3]2 Digitman © (29.07.05 8:41) [1]
>> null это и есть "ничто" !
Я бы сказал, что это неопределённое значение. Хотя, действительно, про такое значение нельзя сказать, что оно есть "конкретно кое-что" 8).
← →
erika © (2005-07-29 08:48) [4]Мне просто необходимо вывести 0 в этой поле
← →
Fay © (2005-07-29 09:03) [5]2 erika © (29.07.05 8:48) [4]
СУБД, конечно, Informix?
← →
Johnmen © (2005-07-29 09:12) [6]>Fay © (29.07.05 09:03) [5]
IB, о чём и сказано в теме. Вот только версия неизвестна...:)
← →
erika © (2005-07-29 10:01) [7]Версия 6.0.1.6
← →
Fay © (2005-07-29 10:07) [8]2 erika © (29.07.05 10:01) [7]
Это сознательное издевательство над собой!
← →
Johnmen © (2005-07-29 10:13) [9]>erika © (29.07.05 10:01) [7]
Рекомендую сменить на FireBird 1.5
Тогда будет доступна функция COALESCE и много других фич.
← →
Lexer © (2005-07-29 10:13) [10]
CALESCE(view1.field1,0) - CALESCE(view1.field2,0) - CALESCE(view2.field1,0)
← →
Lexer © (2005-07-29 10:14) [11]Извиняюсь, конечно же
COALESCE
← →
erika © (2005-07-29 10:20) [12]Ага-а! СЕйчас попробую!
← →
erika © (2005-07-29 10:24) [13]База уже существует и в ней работают, как можно сейчас сменить; просто удалить Ib и установить FireBird???!
← →
Lexer © (2005-07-29 10:30) [14]1. backup на IB
2. restore на FB
но до этого придется просмотрть базу на наличие в именах объектов ключевых слов, специфичных для FB, если такие имена есть, то придется поменять еще и приложение
смотри Migration Guide
зы: у мня переход занял почти 2 месяца.
← →
Johnmen © (2005-07-29 10:32) [15]>зы: у мня переход занял почти 2 месяца.
М-да... Круто...
Обычно около 1 часа. Если, конечно, БД спроектирована нормально и не битая.
← →
Lexer © (2005-07-29 10:40) [16]>[15] Johnmen © (29.07.05 10:32)
БД спроектирована нормально, та долго из-за лишком большого количества использования ключевых слов, двойных ковычек в таблицах, процедурах, тригерах, в запросах хранящихся в таблице запросов...
изменение БД, тянуло за собой изменение приложения (это был кошмар)
в БД 197 таблиц, 952 процедуры, и немеренно триггеров...
Еще были роблемы при преобразовании NUMERIC в CHAR(VARCHAR) - получалось так что 1 показывался как 0000001 после преобразования в строку, нули добивались до длины строки.
>Обычно около 1 часа.
об этом я мог только мечтать
← →
erika © (2005-07-29 10:49) [17]> при преобразовании NUMERIC в CHAR(VARCHAR)
Можно поподробнее на эту тему; у меня полей NUMERIC/где количество записывается до кучи/, где можно посмотреть по типам данных Fb
← →
erika © (2005-07-29 10:51) [18]где можно скачать Fb - хорошей версии
← →
Lexer © (2005-07-29 10:54) [19]http://firebird.sourceforge.net
← →
Johnmen © (2005-07-29 11:03) [20]>Lexer © (29.07.05 10:40) [16]
Всё сказанное всё-таки говорит об упущениях и ошибках при проектировании...
← →
Lexer © (2005-07-29 11:13) [21]Johnmen © (29.07.05 11:03) [20]
Всё сказанное всё-таки говорит об упущениях и ошибках при проектировании...
Это смешно и глупо!!!
Откуда я мог знать 3 года назад, используя IB 5, что придумают такую вещь как FireBird, а в нем нельзя будет использовать каких-то имен, и появятся новые ограничения.
Например: сейчас у меня есть таблица EMPLOYEE, а в следующих версиях это слово будет зарезервировано СУБД, и предется менять её название, это что моя ошибка?
← →
Johnmen © (2005-07-29 11:28) [22]>Lexer © (29.07.05 11:13) [21]
Интуичить надо было ! :)))
И по поводу нумерик в чар - это что ?
← →
Lexer © (2005-07-29 11:42) [23]>Еще были роблемы при преобразовании NUMERIC в CHAR(VARCHAR) - получалось так что 1 показывался как 0000001 после преобразования в строку, нули добивались до длины строки.
Извиняюсь, я ошибся, нолями строка добивается конечно же после цифры, т.е. 1 -> 1.0000000000000.
Вот наглядный пример:SELECT CAST(CAST(112 AS NUMERIC(15,2)) AS VARCHAR(20))
FROM Любая_таблица
← →
Fay © (2005-07-29 11:48) [24]2 Lexer © (29.07.05 11:42) [23]
Как это связано с миграцией?
← →
Lexer © (2005-07-29 11:49) [25]Сложность была вот в чем:
есть поля типа Numeric(15,2)
Поле1 = 1.12
Поле2 = 2
Поле3 = 3.1
Поле4 = 1
Поле5 = 0
Надо получить из строчку : "1.12/2/3.1/1/0"
В IB5 было все прекрасно, но в FB, полный бардак:
1.12000000/2.0000000/3.10000000/1.0000000/0.0000000000
Пришлось извращаться чтоб привести к нормальному виду
Может это тоже моя ошибка? =)
← →
Fay © (2005-07-29 11:51) [26]2 Lexer © (29.07.05 11:49) [25]
>> Может это тоже моя ошибка?
Несомненно!
Не понимаю
1) каким образом число вдруг становится строкой?
2) чему Вы улыбаетесь?
← →
Lexer © (2005-07-29 11:57) [27][26] Fay © (29.07.05 11:51)
>> Может это тоже моя ошибка?
>Несомненно!
неужели...
> Не понимаю
что тут не понятного? надо перевести несколько числовых полей в строку с рузделителями
> 1) каким образом число вдруг становится строкой?
CAST (число AS VARCHAR(20))
> 2) чему Вы улыбаетесь?
действительно, здесь плаать надо, столкнтесь с такой проблемой, поймете
← →
Fay © (2005-07-29 12:08) [28]2 Lexer © (29.07.05 11:57) [27]
Мне ни разу не удавался такой фокус. IBExpert так же возвращает?
← →
Lexer © (2005-07-29 12:13) [29]> Fay © (29.07.05 12:08) [28]
> Мне ни разу не удавался такой фокус. IBExpert так же возвращает?
да!
Кстати, я писал уже об этой проблеме, говорят и IB 6 также возвращает, и самое страшное то, что я заметил это только после миграции, этого я ни нашел ни в одной статье и доке.
← →
Fay © (2005-07-29 12:16) [30]2 Lexer © (29.07.05 12:13) [29]
Можно взглянуть на эту базу?
Меня вполне бы устроил backup metadata only с одной этой таблой. Лучше, конечно, с данными. OK?
← →
Lexer © (2005-07-29 12:20) [31]Можно взглянуть на эту базу - исключено
backup metadata only - исключено
Лучше, конечно, с данными - смешно
да и смысл какой, выполни у себя вот это:SELECT CAST(CAST(12 AS NUMERIC(15,2)) AS VARCHAR(20))
FROM Любая_таблица
и всё будет понятно.
зы: поубивал бы разработыиков IB6, FB за такую подставу.
← →
Fay © (2005-07-29 12:23) [32]2 Lexer © (29.07.05 12:20) [31]
12.00
Но не 12.0000000
← →
Fay © (2005-07-29 12:25) [33]2 Lexer © (29.07.05 12:20) [31]
MSSQL вернул то же самое.
← →
Lexer © (2005-07-29 12:29) [34][33] Fay © (29.07.05 12:25)
СУБД какая?
← →
Fay © (2005-07-29 12:30) [35]2 Lexer © (29.07.05 12:29) [34]
Firebird-1.5.2.4731-Win32
← →
Johnmen © (2005-07-29 12:31) [36]>Lexer © (29.07.05 12:20) [31]
Никаких подстав нет.
Много нулей - это значит у тебя 1 диалект. Так и д.б.
12.00 - это значит 3 диалект, так и д.б.
А в целом, не надо путать проблемы отображения и хранения.
Первые - удел приложения. И не имеют НИКАКОГО отношения ко вторым.
← →
Fay © (2005-07-29 12:32) [37]2 Lexer © (29.07.05 12:29) [34]
Я возился с IB ещё с 4-й версии и ни разу не видел такого фокуса. М.б. забыл...
← →
Lexer © (2005-07-29 12:33) [38][35] Fay © (29.07.05 12:30)
аналогично
странно...
может зависит от диалекта, у меня первый
← →
Fay © (2005-07-29 12:35) [39]2 Johnmen © (29.07.05 12:31) [36]
На самом деле, в 1-м диалекте есть нули. Не знал. Теперь знаю, но мне пофиг 8)
← →
Lexer © (2005-07-29 12:36) [40]> Fay © (29.07.05 12:32) [37]
см. [25]
> Johnmen © (29.07.05 12:31) [36]
>А в целом, не надо путать проблемы отображения и хранения.
>Первые - удел приложения. И не имеют НИКАКОГО отношения ко вторым.
Согласен, у меня так и реализовано, хранение здесь, как и должно быть - в числовом формате, отображение - строка
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.017 c