Как организовать доступ к Oracle 8.1.7 из программ на C.
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
-
- Сообщения: 3
- Зарегистрирован: 16 дек 2004, 04:58
Приветствую All,
В общем, такая ситуация. Мне необходимо организовать доступ из программы на C в Oracle.
До этого использовал perl + DBI.
Сейчас уже необходимо из perl макета сделать _быстродействующий_ модуль на C.
Какие методы лучше использовать?
UnixODBC? OCI? Что-то еще?
Базы Oracle/Solaris, Oracle/Linux.
Модуль на perl/C под linux/freebsd.
Oracle clients для 8.1.7 установлены в обеих системах (Linux/FreeBSD)
В общем, такая ситуация. Мне необходимо организовать доступ из программы на C в Oracle.
До этого использовал perl + DBI.
Сейчас уже необходимо из perl макета сделать _быстродействующий_ модуль на C.
Какие методы лучше использовать?
UnixODBC? OCI? Что-то еще?
Базы Oracle/Solaris, Oracle/Linux.
Модуль на perl/C под linux/freebsd.
Oracle clients для 8.1.7 установлены в обеих системах (Linux/FreeBSD)
Best regards,
lightspeed
lightspeed
-
- Сообщения: 3
- Зарегистрирован: 16 дек 2004, 04:58
Вы можете подсказать пример программы с использованием OCI? Может документация есть где?
Best regards,
lightspeed
lightspeed
sprintf((char *)query, "select * from table_name ");
status = OCI_StmtPrepare(&ora_h, &stmt, query);
if (status !=OCI_dNormal) {
printf("Error parsing query '%s'\n", OCI_getLastError());
}
status = OCI_StmtExecute(&ora_h, &stmt, 1, &var1, &var2 ....);
if (status ==OCI_dError) {
printf("Error execute query '%s' status=%d\n", OCI_getLastError(), status);
}
status = OCI_StmtPrepare(&ora_h, &stmt, query);
if (status !=OCI_dNormal) {
printf("Error parsing query '%s'\n", OCI_getLastError());
}
status = OCI_StmtExecute(&ora_h, &stmt, 1, &var1, &var2 ....);
if (status ==OCI_dError) {
printf("Error execute query '%s' status=%d\n", OCI_getLastError(), status);
}
Если важно именно быстродействие, то следует использовать прямые обращения к OCI. Документация есть в Oracle.
Вот пример программы, обрабатывающей запрос на получение одного действительного числа:
Здесь описание STDMETHODIMP и тип VARIANT объясняются тем, что эта функция использована в модуле, который является COM-объектом. chekErr - функция обработки исключений, ее пример есть в описании OCI, там же в документации Oracle.
Вот пример программы, обрабатывающей запрос на получение одного действительного числа:
Код: Выделить всё
STDMETHODIMP COraread::get_Value(BSTR sqlstring, VARIANT* pVal)
{
USES_CONVERSION;
OCIPrepare(stmtp,err,W2A(sqlstring),wcslen(sqlstring),OCI_NTV_SYNTAX,OCI_DEFAULT);
checkErr(err,OCIDef(stmtp,&def,err,1,&pVal->dblVal,sizeof(double),4,(dvoid*)0,0,0,OCI_DEFAULT));
if(OCIExecute(svc,stmtp,err,1,0,(OCISnapshot*)0, (OCISnapshot*)0, OCI_EXACT_FETCH)==OCI_NO_DATA)
{
pVal->vt=VT_NULL;
return S_OK;
}
pVal->vt = VT_R8;
return S_OK;
}
-
- Сообщения: 497
- Зарегистрирован: 17 фев 2004, 11:26
- Откуда: Ленинград (который Город на Неве)
- Контактная информация:
Возможны варианты, как то:
1. OCCI - (Родной, Oracle)
2. OTL - рекомендую. очень удобная феня. примеры на сайте в изобилии. http://otl.sourceforge.net/home.htm
1. OCCI - (Родной, Oracle)
2. OTL - рекомендую. очень удобная феня. примеры на сайте в изобилии. http://otl.sourceforge.net/home.htm
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)
viel spass, DeeJayC
viel spass, DeeJayC
DeeJayC, про OTL не знал, спасибо. Проверим на быстродействие :-)
-
- Сообщения: 3
- Зарегистрирован: 16 дек 2004, 04:58
Всем,
Ребята, спасибо большое за информацию. Нужен именно C-шный код.
Необходимо разобраться в примерах.
Может кто знает номер (A.....) документа Oracle 8i по использованию OCI на C?
К Grinders,
Ваш код, откуда? Есть ли в <oci.h> эти функции?
Best regards,
lightspeed
Ребята, спасибо большое за информацию. Нужен именно C-шный код.
Необходимо разобраться в примерах.
Может кто знает номер (A.....) документа Oracle 8i по использованию OCI на C?
К Grinders,
Ваш код, откуда? Есть ли в <oci.h> эти функции?
Best regards,
lightspeed
Best regards,
lightspeed
lightspeed
-
- Сообщения: 497
- Зарегистрирован: 17 фев 2004, 11:26
- Откуда: Ленинград (который Город на Неве)
- Контактная информация:
OCI именно для C, а не для C++lightspeed писал(а):Всем,
Ребята, спасибо большое за информацию. Нужен именно C-шный код.
Необходимо разобраться в примерах.
Может кто знает номер (A.....) документа Oracle 8i по использованию OCI на C?
К Grinders,
Ваш код, откуда? Есть ли в <oci.h> эти функции?
Best regards,
lightspeed
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)
viel spass, DeeJayC
viel spass, DeeJayC
Это просто написаны обертки к функциям OCI.
Так как разработка шла и для Linux и для OpenVMS :lol:
Так как разработка шла и для Linux и для OpenVMS :lol: