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

Вниз

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

 
Alex--   (2005-11-07 14:54) [0]

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


 
Anatoly Podgoretsky ©   (2005-11-07 15:03) [1]

А какой уровень SQL92 ты имеешь в виду.


 
Alex--   (2005-11-07 15:09) [2]

Есть функции возврощающие таблицы данных (в разных БД). Так вот что бы синтаксис выборки был одинаков типа "Select Id, Name from MyFunction where Name = "Пупкин П.П.""


 
Nikolay M. ©   (2005-11-07 15:10) [3]

А с каких это пор "драйвера доступа к данным" (термин тот еще, надеюсь, я его понял :) ) имеют что-то общее со стандартом SQL?
Пиши по стандарту ANSI - есть надежда, что почти везде будет работать, но этот геморрой не стоит свеч, имхо.


 
Alex--   (2005-11-07 15:11) [4]

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


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

например в 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:34) [6]

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


 
evvcom ©   (2005-11-07 15:36) [7]


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

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


 
Anatoly Podgoretsky ©   (2005-11-07 15:52) [8]

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


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

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


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

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


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

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


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

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


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


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

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


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

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


 
Johnmen ©   (2005-11-09 09:27) [15]

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


 
YuRock ©   (2005-11-09 09:46) [16]


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


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

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

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


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


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


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


 
Ega23 ©   (2005-11-09 09:51) [17]


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


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


 
Johnmen ©   (2005-11-09 09:51) [18]

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

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

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


 
YuRock ©   (2005-11-09 09:52) [19]

> Johnmen

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


 
Zacho ©   (2005-11-09 09:57) [20]

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


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


 
Johnmen ©   (2005-11-09 10:01) [21]

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

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


 
Sergey13 ©   (2005-11-09 10:16) [22]

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


 
YuRock ©   (2005-11-09 10:18) [23]


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

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

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????? перед словом "входит" нет слова "не" - думал, это автор написал.



Страницы: 1 вся ветка

Текущий архив: 2006.01.01;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.035 c
2-1134538198
Eric
2005-12-14 08:29
2006.01.01
TabControl


2-1134479787
Dysan
2005-12-13 16:16
2006.01.01
SQL.Append Драйвер не поддерживает данной функции?


2-1134640643
Uzver
2005-12-15 12:57
2006.01.01
Как открыть файл?


5-1119712589
NewMaxNeo
2005-06-25 19:16
2006.01.01
НЕ могу найти модуль


14-1133779473
k2
2005-12-05 13:44
2006.01.01
Математика для детей.