|
|
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
Добрый день, господа. Объясните, плиз, на пальцах, технологию обращения к БД приложения, написанного с использованием сабжа. И, если получится, зачем такой механизм вообще был придуман. Также хотелось бы услышать альтернативные варианты обращения к БД (Oracle), с учетом того, что обращаться должно приложение (С), работающее на той же машине под Solaris. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2006, 14:55 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
T800..альтернативные варианты обращения к БД (Oracle), с учетом того, что обращаться должно приложение (С), работающее на той же машине под Solaris. Не совсем понятно, что имется в виду. Насколько я знаю, можно менять тип драйвера (thin, oci) способ взаимодействия IPC, Socket, Secure Socket и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2006, 16:48 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
Оставляя за собой право сказать глупость: Используешь - Embeded SQL, остается тайной за семью печатями, какие конкретно функции драйвера БД используются в том или ином случае.. И какого драйвера. Читая мануал к Ораклу для девелоперов по OCI, получил ссылки на библиотеки, которых нет там, где предлагается их найти.. Имеющийся перед глазами проект использует Embeded SQL, поэтому подсмотреть как надо негде. Но по аналогии с тем, как это делается на JAVA под мастдаем, должен быть похожий солюшн под С. Но, думаю, что публике все равно до моих мучительных поисков.. Поэтому просьба - в общих чертах (т.е. неподробно) - Как выглядит работа с ORACLE для C-прилижений из-под Solaris Будьте здоровы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2006, 17:51 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
T800 Используешь - Embeded SQL, остается тайной за семью печатями, какие конкретно функции драйвера БД используются в том или ином случае.. И какого драйвера. В термин Embeded SQL вкладывают разный смысл. Если он Embeded, то куда? Я знаю о Embeded RDBMS - но это другая история. T800 Читая мануал к Ораклу для девелоперов по OCI, получил ссылки на библиотеки, которых нет там Соответствующие драйверы OCI входят в состав Oracle Server. Качается бесплатно на www.oracle.com. Возможно существует и отдельный пакет, но я как-то не уделял этому особого внимания. T800 Но по аналогии с тем, как это делается на JAVA под мастдаем, должен быть похожий солюшн под С. Так-же T800 Но, думаю, что публике все равно до моих мучительных поисков.. Поэтому просьба - в общих чертах (т.е. неподробно) - Как выглядит работа с ORACLE для C-прилижений из-под Solaris Вопрос странен. Есть особенности установки и настройки драйверов под Solaris. Но это нужно читать в мануале к драйверу. Кстати ты до сих пор не сказал, какой у тебя Солярис. SPARK? или x86? Работа С-приложений выглядит точно так-же. Есть мелкие различия, касаемые файловой системы и особенностей работы с мультипоточностью, типов данных, директив препроцессора, но в целом, протокол методов работы с OCI должен быть одинаковым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2006, 19:15 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
T800Объясните, плиз, на пальцах, технологию обращения к БД приложения, написанного с использованием сабжа. прям в сишном коде можешь пользоваться конструкциями сиквела. - препроцессор компилит в код. как правило используется в DB/2 для создания Stored Procedures. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2006, 00:28 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
Технология такая. В коде на C (или C++) пишутся специальные ключевые слова, которые позволяют написать запрос, выполнить его и положить результаты запроса (колонки т.е.) в переменные С. ПРограмма, написаная таким образом, обрабатывается специальным препроцессором, который обычно преобразует эти ключевые слова в вызовы CLI API (call-level interface API типа ODBC, db-lib, ct-lib, oracle CLI API и т.п.), которые делают то что должны сделать соотв. операторы Embedded SQL. Потом такая программа компилируется и линкуется обычным способом и далее может работать. Embedded SQL - потому что операторы SQL как бы встроены в программу на C. Кажется есть даже стандарт на это дело, который определяет, как это должно выглядеть для всех СУБД. На сколько я знаю, ESQL рассматривается всеми скорее как legacy API, т.е. как устаревшее, но с другой стороны его еще никто не отменял. Оно хорошо тем, что позволяет выполнить запрос и получить результат не изучая сложные и запутанные CLI API. Т.е. позволяет сделать простые вещи просто. Но соответственно в этом его и минус. Альтернативы - любой CLI API, или средства типа ADO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2006, 15:13 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
Embedded SQL - в разных СУБД к этому отношение совершенно разное. Лучшая реализация - в DB2. Оснавная связанная с ним фича - Static SQL. В Db2 - это делается так: создается файл *.sqx - который обрабатывается препроцессором, а в результате получается 2 файла - *.сxx (исходник на С++) и *.bnd (это типа байт-кода который должен быть встроен в базу данных при помощи операции bind) Если посмотреть на Sybase, MSSqls, Oracle и пр., то там в результате работы препроцессора получается только 1 файл, который затем нужно откомпилить. А в базе данных параллельно создается хранимая процедура специального типа. Кстати говоря, если вдруг задумаете писать на ESQL для MSSQL или SYBASE - то лучше не беритесь. Ничего кроме геморроя. Тем более что там о С++ и речи быть не может. Только чистый С. А если на DB2 или Оracle - то все будет выглядеть наоборот. В DB2 после связывания пакета с базой данных может заодно сформироваться и план запроса. Поэтому всегда ясно что и как будет выполняться. Это основная причина почему DB2 так долго не собиралась реализовывать хранимые процедуры - потому, что нафиг не нужно было. Лично мне этот способ написания приложений для баз данных нравится больше всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 13:30 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
gardenmanЕсли посмотреть на Sybase, MSSqls, Oracle и пр., то там в результате работы препроцессора получается только 1 файл, который затем нужно откомпилить. А в базе данных параллельно создается хранимая процедура специального типа. Кстати говоря, если вдруг задумаете писать на ESQL для MSSQL или SYBASE - то лучше не беритесь. Ничего кроме геморроя. Тем более что там о С++ и речи быть не может. Только чистый С.Не понял, что за "паралелльно создающаяся хранимая процедура" Зачем она создается??? Ты ж клиента пишешь, какие такие хранимые процедуры? А насчет писания на ESQL для Sybase - тут ты не прав на все 100%. Очень удобно и легко. Можешь писать как на C так и на C++. Прогоняешь исходник через препроцессор, компилируешь и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 17:51 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
White OwlНе понял, что за "паралелльно создающаяся хранимая процедура" Зачем она создается??? Ты ж клиента пишешь, какие такие хранимые процедуры? дело в том что DB/2, Oracle - мульплатформенные, а в DB/2 до последнего времени спровождение SP требовало наличия доступного С компилятора на сервере. И с этим куча гемороя при компиляции SP при установке базы. А если все в клиенте - тогда и делать ничего не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2006, 19:21 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
<сиедено> MasterZiv ПРограмма, написаная таким образом, обрабатывается специальным препроцессором, который обычно преобразует эти ключевые слова в вызовы CLI API <сиедено опять> MasterZiv Альтернативы - любой CLI API, или средства типа ADO. Вы практически поняли мой вопрос - синтаксис ESQL меня не интересует - он перед глазами.. Важно, как в конечном счете рабает получившийся код. Дергает ли он CLI API, или, как выразился коллега, создает хранимые процедуры на сервере (эт че, статически что ли? 8О).. Короче, как это потом работает? Да, ессно, пишется клиет, но он работает на одной машине с БД, я это отметил, поскольку, возможно, из этого вытекают какие-то дополнительные возможности. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 13:10 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
White Owl gardenmanЕсли посмотреть на Sybase, MSSqls, Oracle и пр., то там в результате работы препроцессора получается только 1 файл, который затем нужно откомпилить. А в базе данных параллельно создается хранимая процедура специального типа. Кстати говоря, если вдруг задумаете писать на ESQL для MSSQL или SYBASE - то лучше не беритесь. Ничего кроме геморроя. Тем более что там о С++ и речи быть не может. Только чистый С.Не понял, что за "паралелльно создающаяся хранимая процедура" Зачем она создается??? Ты ж клиента пишешь, какие такие хранимые процедуры? А насчет писания на ESQL для Sybase - тут ты не прав на все 100%. Очень удобно и легко. Можешь писать как на C так и на C++. Прогоняешь исходник через препроцессор, компилируешь и все. Ну, если посмотреть Sybase ASE - то тут я прав на все 100+1%. А что касается ASA, то ... смысл Embedded SQL - уйти от динамического SQL. Не думаю что ASA справляется именно с этой задачей. Ведь смысл ESQL в том, что весь этот самый SQL уже откомпилированный лежит на сервере и приложение его только дергает. В противном случае в ESQL и смысла то нет. 2 White Owl - какие объекты создает ASA на сервере после обработки препроцессором? ASE - создает хранимую процедуру. (Сам писАл, знаю). DB2 - создает пакет SQL, который затем встраивается в базу данных. Что делает Oracle - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 14:50 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
gardenmanВедь смысл ESQL в том, что весь этот самый SQL уже откомпилированный лежит на сервере и приложение его только дергает. В противном случае в ESQL и смысла то нет. Дык, он туда динамически кладется, или при проходе препроцессором? Второе кажется очень маловероятным.. Але, человеки, кто-нить точно знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 18:11 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
T800Важно, как в конечном счете рабает получившийся код. Дергает ли он CLI API, или, как выразился коллега, создает хранимые процедуры на сервере (эт че, статически что ли? 8О).. Короче, как это потом работает? Работает он так же, как и через CLI API. Никаких дополнительных возможностей нет. А то, что пишет gardenman - скорее экзотическая особенность DB2. Правда почти наверняка там можно (как и при использовании CLI API) сделать так называемый "подготовленный запрос" - prepared statement. В таком случае в Sybase , MSSQLServer действительно создаются временные процедуры с планами при первом выполнениии. Но это - полумеры, гораздо лучше написать эту процедуру самому и вызывать уже ее с клиента. Короче, мое мнение - ESQL нужно рассматривать только как средство написания клиента "для ленивых". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 20:53 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
T800 gardenmanВедь смысл ESQL в том, что весь этот самый SQL уже откомпилированный лежит на сервере и приложение его только дергает. В противном случае в ESQL и смысла то нет. Дык, он туда динамически кладется, или при проходе препроцессором? Второе кажется очень маловероятным.. Але, человеки, кто-нить точно знает? Еще раз, это -- специфика DB2. В других СУБД такого может не быть или быть что-то другое. В DB2 "он" (т.е. откомпилированный SQL) кладется "туда" (на сервер) в момент компиляции приложения (т.е. при обработке препроцессором), на сколько я знаю (но могу ошибаться). Ничего маловероятного здесь нет - IBM-ы -- они же хитрые, они же умнее всех !!! Вот у них все не как у остальных людей. В MSSQL, Sybase это делается при "подготовке" запроса - при первом его выполнении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 20:58 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
gardenman касается ASA, то ... смысл Embedded SQL - уйти от динамического SQL. Смысл динамического SQL - только один - написать клиента просто и быстро. Другие цели достигаются и без ESQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2006, 21:00 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
Если рассмотреть любой исходник любой софтины без микроскопа, то что мы увидим? Увидим кучу стрингов в которых "select ... from...where a=? and b=?..." и в добавок к этому кучу стрингов "call my_sp_xxxxxx(?,?,?..)". Причем второй способ -"call" более предпочительнее. Почему? потому что SP лежит на сервере уже откомпилированная. Но только вот тут возникает одна маленькая трудность. Сколько этих самых SP будет у вас лежать на сервере? Сколько сотен, тысяч? Вы будите в состоянии помнить все их названия? Вы уверены в том что когда вы создаете процедуру такую процедуру, которая выполняет то же самое не написал уже кто-то еще?... Вы можете выполнить не всю, а только чать процедуры? Вы делая CALL точно знаете что вы делаете, вы заглянули в исходник процедуры? Вы уверены в том, что какой-нить придурок потом вдруг не поменяет код процедуры и она у вас начнет работать совсем не так как вы хотели? Вы должны отдавать себе отчет что должны сопровождать вместо одного исходника - исходника программы, еще и SP на сервере. Вобщем я не против SP, но всякий подход сначала должен быть взвешен и оправдан. Динамический SQL хорош в DWH и OLAP где трудно предугадать каков будет запрос. Т.е. он должен быть сформирован ДИНАМИЧЕСКИ во время исполнения. А прикиньте такой случай - чувак открывает програмку в каком-нить бинарном редакторе, перебивает строку "select..." на "update..." и вы получаете проблемы по полной программе. Шутка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 10:53 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
gardenmanmy_sp_xxxxxx(?,?,?..)". Причем второй способ -"call" более предпочительнее. Почему? потому что SP лежит на сервере уже откомпилированная. В контексте разговора о любой СУБД это утверждение неверно. Т.е. что оно "откомпилировано". gardenman Но только вот тут возникает одна маленькая трудность. Сколько этих самых SP будет у вас лежать на сервере? Сколько сотен, тысяч? Вы будите в состоянии помнить все их названия? Ну пять тысяч. Ну и ? Да, буду. gardenman Вы уверены в том что когда вы создаете .... взвешен и оправдан. Это к использованию ESQL не имеет никакого отношения. gardenman Динамический SQL хорош в DWH и OLAP где трудно предугадать каков будет запрос. Т.е. он должен быть сформирован ДИНАМИЧЕСКИ во время исполнения. А прикиньте такой случай - чувак открывает програмку в каком-нить бинарном редакторе, перебивает строку "select..." на "update..." и вы получаете проблемы по полной программе. Шутка... Да, кругом одни враги... а что делать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 13:48 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
2 MasterZiv Я - лентяй. Мне лень переключаться между системами разработки - типа SQL Advantage/ Visual Studio. Я предпочитаю чтобы исходник весь был перед глазами. Ну удобнее мне так. Да и ошибок меньше. Пока препроцессор не отработал - ничего не слинкуется. :)) А на самом деле - делайте так как хотите или так как умеете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 14:44 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
gardenmanА что касается ASA, то ... смысл Embedded SQL - уйти от динамического SQL.Ни в коем случае. В ASA ESQL это единственный способ использовать нативный клиентский драйвер dblib. Некоторые вещи (административного уровня, как например найти все сервера в сети) можно сделать только через dblib и соотвественно ESQL. Если же пишешь обычного клиента, а не утилиту управления серверами, то хватает стандартных интерфейсов типа ODBC/OLE DB/ADO. Динамический SQL есть во всех типах интерфейсов. gardenmanВедь смысл ESQL в том, что весь этот самый SQL уже откомпилированный лежит на сервере и приложение его только дергает. В противном случае в ESQL и смысла то нет.Ни в коем случае. "Откомпилированный и на сервере" это хранимые процедуры или юзерские расширения во внешних dll. К ESQL это отношения не имеет. gardenman2 White Owl - какие объекты создает ASA на сервере после обработки препроцессором?Никаких совершенно. ESQL для ASA это чисто клиентский интерфейс. Кстати, очень похожий по структуре на ODBC. Все что можно сделать с ODBC можно сделать и с ESQL. Ну и как я уже говорил ESQL позволяет делать некоторые чисто административные функции которые в обычном клиенте нафиг не нужны. gardenmanASE - создает хранимую процедуру. (Сам писАл, знаю). DB2 - создает пакет SQL, который затем встраивается в базу данных. Что делает Oracle - не знаю.Под ASE не писал. Может там и есть такая фигня. MasterZiv, ау! Скажи свое веское слово. С DB2 сложнее - ESQL для него не просто клиентский интерфейс . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 18:08 |
|
||
|
Embeded SQL и альтернативы
|
|||
|---|---|---|---|
|
#18+
gardenmanЯ - лентяй. Мне лень переключаться между системами разработки - типа SQL Advantage/ Visual Studio. Я предпочитаю чтобы исходник весь был перед глазами. Ну удобнее мне так. Да и ошибок меньше.А ты не переключайся. Вот у меня вся разработка в FAR ведется. Самая лучшая среда для разработки :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 18:13 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33617230&tid=2031707]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
74ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 227ms |
| total: | 395ms |

| 0 / 0 |
