Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Простой запрос из MSSQL2000 не работает в FireBerd1.5 [IB6.x, MSSQL]


Страницы:   1 2

VadimKV ©   (2004-07-08 15:13:00) 

Элементарный запрос MSSQL2000.
В этом запросе данные берутся из вложенного запроса (который фактически формирует таблицу)- этот запрос наверное называется вложенным.
selectt.field_name from
( selectfield_name fromlist_fld) ast

В FireBerd1.5/IB6 приведенный ниже запрос тоже называется вложенным, но это разные запросы, т.к. данные берутся не из вложенного запроса в скобках.
selectfield_name fromlist_fld
wherefield_name in
( selectfield_name fromlist_fld)
Псевдоним присвоить тут нельзя т.к. запрос после Where.
А первый запрос из MSSQL2000 в своем первоначальном виде в FireBerd1.5 не работает.
Как реализовать конструкцию запроса MSSQL в FireBerd1.5?


Курдль   (2004-07-11 20:46:00) [1]


> Desdechado ©   (10.07.04 14:53) [28]
> По поводу концептуальной модели - очень правильно, вот только
> БД должна некоей мерой быть защищена от дурака.

А я разве сказал про отсутствие защиты? Вам удобно что-то компоновать в домены (если я правильно понял). Я же это делаю на уровне концептуальной модели. При автоматической генерации CASE-средствами физической модели БД, а потом и скрипта самой базы, эти правила реализуются на основании идеологии СУБД. Причем, не важно, какойСУБД. С некоторых пор я даже не проверяю скрипты - мои инструменты ни разу еще не подводили.


Fay   (2004-07-10 15:51:00) [2]

2Desdechado ©   (10.07.04 14:53) [28]
>> можно одним махом поменять его - и все поля пойдут одной дорогой.

Давно не проверял, под рукой нет. Но память говорит, что так не получится.


Desdechado   (2004-07-10 14:53:00) [3]

DISTINCT с блобом мне тоже как-то не нужно было, а вот с CLOB вполне может и понадобиться :) Хотя еще не было такого случая.
Просто в голову пришло попробовать, как сервера соблюдают правила  :)

2 Fay
Пробовал, ничего не вышло (по крайней мере, в FB1), но это не умаляет их достоинств. На уровне таблиц можно сделать много вещей, чтоб не лепить в триггеры. Да и один домен в 10 разных местах использовав, можно одним махом поменять его - и все поля пойдут одной дорогой.

По поводу концептуальной модели - очень правильно, вот только БД должна некоей мерой быть защищена от дурака, чтобы помимо тех правил, что придумал разработчик, кто-нибудь по своим правилам не записал туда что-то, что программа потом не опознает за корректные данные.


Fay   (2004-07-10 02:44:00) [4]

Desdechado ©   (09.07.04 13:49) [25]
Не пробовали использовать домены в ХП? Попробуйте - очень бодрит! 8)


Курдль   (2004-07-09 23:20:00) [5]


> Desdechado ©   (09.07.04 13:46) [24]
> SELECT DISTINCT int_field, BLOB_field from tbl
> В FB проходит, причем правильно, а Оракл гневно ругается

Точно! В Оракле-8: "Inconsistent Datatypes". Однако, не могу себе представить надобность такой фитчи. Пока не надобилась :)


> Desdechado ©   (09.07.04 13:49) [25]
> Я уж не говорю про понятие домена, который может содержать
> всякие ограничения на содержимое и проверки.

А зачем? Зачем это держать на уровне базы? Это все прописывается на уровне концептуальной модели - домены, бизнес-правила и т.п.
Какая разница. как это все "ложится" в БД?


Desdechado   (2004-07-09 13:49:00) [6]

2 Курдль ©   (08.07.04 15:43) [10]
Я уж не говорю про понятие домена, который может содержать всякие ограничения на содержимое и проверки, а в Оракле я аналога не знаю. Мож кто подскажет? Или я так и останусь с мыслью, что здесь недоработочка...


Desdechado   (2004-07-09 13:46:00) [7]

Курдль ©   (08.07.04 15:43) [10]
А причем здесь Оракл? Чего это он не умеет, что умеет IB?

попробуй сделать
SELECT DISTINCT int_field, BLOB_field from tbl
В FB проходит, причем правильно, а Оракл гневно ругается :)


Danilka   (2004-07-09 11:27:00) [8]

[18] Sandman25 ©   (08.07.04 15:55)
> Мой "рекорд" - 29 kb :)

Ужас! :))
Я с больше чем 15к не работал, а сам не писал.
Точнее, писал когда-то что-то сравнимое, но из-за особенностей генератора отчетов.


Fay   (2004-07-08 19:30:00) [9]

Курдль ©   (08.07.04 15:43) [10]

> Чего это он не умеет, что умеет IB???  8-()

Нравит ься просто так без причин. 8)


Sandman25   (2004-07-08 16:04:00) [10]

") as max_key" забыл удалить


Sandman25   (2004-07-08 16:03:00) [11]

select name_table,
sum(      
case
when field_type = 'long' then 4
when field_type = 'alpha' then field_size
when field_type = 'number' then 8
when field_type = 'date' then 4
end
) as size_field
from list_fld
where field_key = '*'
group by name_table) as max_key
having sum(      
case
when field_type = 'long' then 4
when field_type = 'alpha' then field_size
when field_type = 'number' then 8
when field_type = 'date' then 4
end
) > 195


VadimKV   (2004-07-08 15:58:00) [12]

Sandman25 так что, в FireBerd1.5 такую конструкцию совсем не льзя реализовать - select * from (<запрос>)
Незнаю как вы считаетя, а Я думаю такая конструкция жизненно необходимо. Вот пример где без этого кажется не обойтись.

(selectname_table, size_field from /*Здесь данные берутся как из таблицы*/
  (selectname_table,
sum(      /*Сумма*/
case
whenfield_type = 'long' then4
whenfield_type = 'alpha' thenfield_size
whenfield_type = 'number' then8
whenfield_type = 'date' then4
end
) assize_field
  fromlist_fld
  wherefield_key = '*'
  group byname_table ) asmax_key
wheresize_field > 195 ) asTb_mk  /*Это условие накладывается на данные вычесленные в предыдущем запросе*/

Если действительно, кто то знает как решить эту проблему подскажите.


Sandman25   (2004-07-08 15:55:00) [13]

[14] Danilka ©   (08.07.04 15:49)

Мой "рекорд" - 29 kb :)


Danilka   (2004-07-08 15:53:00) [14]

[15] Курдль ©   (08.07.04 15:50)
> а в Оракле до 9-ки такое не акнало

в восьмерке канает. :))


Danilka   (2004-07-08 15:51:00) [15]

[13] Johnmen ©   (08.07.04 15:45)
> Но очень сложно представить (по большому счету), когда без
> "запрос из запроса" не обойтись.

Всегда можно как-то выкрутиться, но так и тянет к халяве. :))


Курдль   (2004-07-08 15:50:00) [16]


> Sandman25 ©   (08.07.04 15:44) [12]
> На IB невозможно построить плохие запросы вида [8]

Насколько я помню, в IB можно делать "запрос внутри запроса" типа
select T1.*, (select sum(T2.SUMMA) from TABLE_2 T2 where T2.T1_ID = T1.T1_ID) as T1_SUMMA from TABLE_1 T1
а в Оракле до 9-ки такое не акнало (только через танцы с группировкой).


Danilka   (2004-07-08 15:49:00) [17]

[10] Курдль ©   (08.07.04 15:43)
Наоборот, этой фишки нет в ИБ.
Можно сделать селект из таблицы, либо из вьюхи, а МС-Скуль и Орокол селект из селекта позволяет делать.

[11] Sandman25 ©   (08.07.04 15:43)
> позволяет страшные вещи делать

Вот именно. Из-за этго потом и появляются запросы на полтора десятка килобайт, которые разгребать умучаешься - почему тормоза. Особенно, когда селект из селекта в котором используются другие вьюхи. :))


> Чтобы делать тормозные вьюхи, запросы из запроса необязательны.
> :( или :)

Но, желательны. :))
Просто, это развязывает руки и начинаешь эту халяву использовать там, где можно спокойно обойтись без нее.


Johnmen   (2004-07-08 15:45:00) [18]

>VadimKV

В ИБ нет конструкции "запрос из запроса".
Его можно сымитировать с пом. VIEW.
Но очень сложно представить (по большому счету), когда без "запрос из запроса" не обойтись. Обычно необходятся те, про кот.намекнул Danilka ©   (08.07.04 15:34) [7]
:)))


Sandman25   (2004-07-08 15:44:00) [19]

[10] Курдль ©   (08.07.04 15:43)

На IB невозможно построить плохие запросы вида [8]

PS. А вообще-то я пытался пошутить :)


Sandman25   (2004-07-08 15:43:00) [20]

[9] Danilka ©   (08.07.04 15:39)

Я недавно занимался MSSQL, мне эта фича очень понравилась, позволяет страшные вещи делать. Наконец-то в версии 9.4 Informix'а появился аналог.

Чтобы делать тормозные вьюхи, запросы из запроса необязательны. :( или :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо