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

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

Поддержка драйверами СУБД языка SQL92


Страницы:   1 2

Alex-- ©   (2005-11-07 14:54:00) 

Мастера!  Существуют ли драйвера доступа к данным различных СУБД (ORACLE, MSSQL, IB и т.д.) без различия синтаксиса SQL.  Например что бы выборка из функций имела одинаковый синтаксис. Хотелось бы по стандарту SQL92.


YuRock   (2005-11-09 10:18:00) [1]


> Хранимая функция? Так есть же. Она называется ХП. :)

Ну, это я уже слышал где-то :)
Интересно, как Вы на процедурах напишите, скажем, такое:

SELECT
 FUNC1( FIELD1 ) * FUNC2( FIELD2 ) * FUNC3( FIELD3 ) * FUNC4( FIELD4 ) * FUNC5( FIELD5 )
FROM TABLE1


Наверное, так? :

SELECT
 SP1.FIELD1 * SP2.FIELD2 * SP3.FIELD3 * SP4.FIELD4 * SP5.FIELD5
FROM TABLE1
LEFT JOIN FUNC1( FIELD1 ) SP1
LEFT JOIN FUNC1( FIELD2 ) SP2
LEFT JOIN FUNC1( FIELD3 ) SP3
LEFT JOIN FUNC1( FIELD4 ) SP4
LEFT JOIN FUNC1( FIELD5 ) SP5


А вложенности какие могут быть? Разница очень существенная. ХФ можно использовать для операций с полями запроса, процедуры - нет. И это часто ОЧЕНЬ неудобно.


> И причём тут упомянутая поддержка SQL99? Я не понял....

Все, не при чем - просто не заметил, что это в предложении А разве понятие "функция" входит в SQL92?????перед словом "входит" нет слова " не" - думал, это автор написал.


Sergey13   (2005-11-09 10:16:00) [2]

Если бы этим занимался я (а я таким не занимался ни разу 8-), то я бы попробовал нечто вроде такого.
Сосредоточить все базозависимое в отдельных модулях проекта. Типа всю обработку данных в датамодуль. Эти модули должны быть созданы на каждую поддерживаемую БД. Для сборки проги на конкретную БД просто подключить свой специфический модуль.
В общем типа базозаточенного апп-сервера, только внутри клиента.


Johnmen   (2005-11-09 10:01:00) [3]

>YuRock ©   (09.11.05 09:52) [19]
>Ну я имел в виду хранимая :)

Хранимая функция? Так есть же. Она называется ХП. :)
И причём тут упомянутая поддержка SQL99? Я не понял....


Zacho   (2005-11-09 09:57:00) [4]

Alex--   (09.11.05 9:00) [14]
Необходима поддержка Oracle и MSSQL. Варианты: вести отдельный софт для каждой БД (отсекается сразу), писать вилки в зависимости от базы (некрасиво).


Именно эти варианты самые оптимальные. Иначе получшь тормозное глюкало. Или не тормозное, но глюкало. Или не глюкало, но тормозное.
Не веришь - проверь :)
Слишком уж разные РСУБД, с кардинально разной архитектурой.
Впрочем, про вполне работоспособные "универсальные" системы IB-Oracle я слышал. Даже есть "гибрид" этих РСУБД - fyracle ( http://www.janus-software.com/fb_fyracle.html). А вот все известные мне попытки сделать "универсальное" приложение IB - MS SQL были неудачными.


YuRock   (2005-11-09 09:52:00) [5]

> Johnmen

Ну я имел в виду хранимая :)


Johnmen   (2005-11-09 09:51:00) [6]

>YuRock ©   (09.11.05 09:46) [16]

>> А разве понятие "функция" входит в SQL92?????
>Понятие "функция" не входит даже в FB 1.5., стремящийся поддерживать SQL99.

Странно... Есть, но не входит...


Ega23   (2005-11-09 09:51:00) [7]


> вести отдельный софт для каждой БД (отсекается сразу), писать
> вилки в зависимости от базы (некрасиво).
>


Вариант третий - трёхзвенка. Приложение должно "разговаривать" на языке бизнес-правил. А вот интерпритатор этого языка (ApplicationServer) уже должен сам решать, к какой БД и на каком диалекте SQL ему обратиться.


YuRock   (2005-11-09 09:46:00) [8]


> писать вилки в зависимости от базы (некрасиво)


Вилки можно довольно красиво обернуть в десяток своих оберток, у которых "разветвления с небольшими модернизациями :)" будут внутри, вызовы их - всегда одинаковы. По-крайней мере, так более-менее решатся проблемы:
join'ов,
курсоров, возвращаемых хп,
получения айдишников
и т.д.

Думаю - так можно сделать более-менее красивую дрянь. Правда со скриптами баз ты уже ниччё не сделаешь :))

>
> А разве понятие "функция" входит в SQL92?????


Понятие "функция" не входит даже в FB 1.5., стремящийся поддерживать SQL99.


> этот геморрой не стоит свеч, имхо.


Не согласен. Для той же 1С-ины иногда Oracle бы не помешал, а иногда - FB - был бы идеальным вариантом. Но...


Johnmen   (2005-11-09 09:27:00) [9]

Если использовать "универсальный" "движок" (типа dbExpress) и не использовать специфических особенностей реализации SQL для конкретной СУБД, то всё может у тебя получится.
Но тогда надо рассчитывать на возможное появление тормозов там, где их можно было бы легко избежать.


Alex--   (2005-11-09 09:00:00) [10]

>ANB ©   (08.11.05 15:27) [13]
>Но для нормальных приложений - это тормоза, неудобство и пожирание
>ресурсов.
Тормоза и пожирание ресурсов - согласен. Насчет неудобства, это с какой стороны смотреть. В моем случае универсальность важнее. Задача тривиальна. Есть комплекс средств сбора, учета и контроля потребленной электоэнергии на IB6.5.
Необходима поддержка Oracle и MSSQL. Варианты: вести отдельный софт для каждой БД (отсекается сразу), писать вилки в зависимости от базы (некрасиво).


ANB   (2005-11-08 15:27:00) [11]


> Alex--   (08.11.05 08:18) [12]

даже left join у MS SQL и Oracle8 по разному пишутся. А чем дальше в фичи - тем больше разницы. Прокатит везде только выборка из таблиц по одной типа select * from. Но для нормальных приложений - это тормоза, неудобство и пожирание ресурсов.
ЗЫ. Интересно - а что за задача ?


Alex--   (2005-11-08 08:18:00) [12]

Понятие "функция" в SQL92 может и не входит. Вопрос был о наличии инифицированного описания запросов для различных БД, а не о соответствия запросов конкретно SQL92.


Ega23   (2005-11-07 17:09:00) [13]

А разве понятие "функция" входит в SQL92?????


Anatoly Podgoretsky   (2005-11-07 16:14:00) [14]

Их три, самый нижний поддерживают практически все, но он сильно ограниченый, самый старший практически никто не поддерживает.
Это означает, что переносимость можно обеспечить и то под вопросом, только по самому нижниму уровню совместимости.


Alex--   (2005-11-07 16:05:00) [15]

Про уровень ANSI SQL 92 не знаю, просвети.


Anatoly Podgoretsky   (2005-11-07 15:52:00) [16]

Alex--   (07.11.05 15:34) [6]
Вопрос об уровне ANSI SQL 92 так и умапчиваешь, все три уровня наверно не одна база не держит.


evvcom   (2005-11-07 15:36:00) [17]


> например в Oracle выглядит так

Ну вот, знаешь как выглядит это в различных СУБД, и задаешь такие вопросы. Пора бы знать, что "драйвера доступа к данным различных СУБД" собственно не выполняют и не разбирают твой запрос, а передают его серверу в таком виде, в каком ты его подготовил. А "понимать" запрос - это уже дело сервера. И претензии по поводу того, что в различных серверах по-разному реализованы те или иные возможности, надо направлять разработчикам этих серверов, а не разработчикам "драйверов".


Alex--   (2005-11-07 15:34:00) [18]

Хочется универсальности на уровне SQL


Alex--   (2005-11-07 15:19:00) [19]

например в Oracle выглядит так
select * from TABLE (GET_Vhh_CONSUMER(:IDG, :IDCM, :FDATE, :LDATE)) tв MSSQL и IB
select * from GET_Vhh_CONSUMER(:IDG, :IDCM, :FDATE, :LDATE)


Alex--   (2005-11-07 15:11:00) [20]

Так точнее Select Id, Name from MyFunction(параметры..) where Name = 'Пупкин П.П.'


Страницы:   1 2

Наверх

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