Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.11;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.033 c
4-1122138012
KSergey
2005-07-23 21:00
2005.09.11
Как запустить программу с правами system...


3-1122975375
surkis
2005-08-02 13:36
2005.09.11
DBGRID.MultiSelect


1-1124177493
tower
2005-08-16 11:31
2005.09.11
Печать штрих кодов и их сканирование.


6-1116554906
Baz
2005-05-20 06:08
2005.09.11
Клиент для SOAP


14-1124170032
Установщик
2005-08-16 09:27
2005.09.11
Delphi 2005