Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.011 c
14-1124186487
PVOzerski
2005-08-16 14:01
2005.09.11
Перестал загружаться комп с 98-ми - в какую сторону копать?


2-1123572231
Андрей235
2005-08-09 11:23
2005.09.11
Как сделать иконку в трее?


4-1121919319
Pearled
2005-07-21 08:15
2005.09.11
Количество напечатанных страниц


1-1124432789
zorik
2005-08-19 10:26
2005.09.11
Преобразовать строки в код Delphi


1-1124236886
rosl
2005-08-17 04:01
2005.09.11
XML





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский