Является ли этот шаблон Pro*C своего рода лучшей практикой или даже задокументирован?

StackOverflow https://stackoverflow.com/questions/9355887

  •  28-10-2019
  •  | 
  •  

Вопрос

У меня есть какой -то устаревший код Pro*C, использующий вид конструкций ниже.
Этот вид шаблона находится на онлайн -форумах, но ничего в документации Oracle.
Особенно, Google не может найти никакого документа о "SQHSTS" на веб -сайте Oracle.

Этот шаблон где -то задокументирован?
Считается ли это хорошей практикой программирования?

/* cud (compilation unit data) array */
static const short sqlcud0[] =
{10,4130,832,0,0,
5,0,0,1,0,0,27,23,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,1,10,0,0,
36,0,0,2,30,0,4,25,0,0,1,0,0,1,0,2,97,0,0,
};

/* EXEC SQL CONNECT :user IDENTIFIED BY :pwd USING :url; */ 

{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 10;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )10;
sqlstm.offset = (unsigned int )5;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)user;
sqlstm.sqhstl[0] = (unsigned int )0;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)pwd;
sqlstm.sqhstl[1] = (unsigned int )0;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)url;

(Код скопирован из здесь но похож на мой)

Это было полезно?

Решение

Pro*c создает низкий уровень C из таких операторов, как

EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;

Который создает OCI-подобные дескрипторы каждого элемента данных, который вы объявляете. Другие заявления (EXEC SQL ...;) где вы внедряете SQL с этими связанными переменными, затем переводится в серию вызовов нижнего уровня, используя то, что было закодировано в разделе Declare. Pro*c старый. Я работал над первой бета -версией Pro*C 25+ лет назад. ...не рекомендуется.

Код, сгенерированный Pro*C, предварительно компиляцию, не всегда отлично справляется при составлении современными компиляторами с включенными предупреждениями. Это также не предназначено для чтения. Если вы хотите изучать программирование OCI, вы можете получить то, что происходит. Также не рекомендуется, если только вы не хотите выполнять какие -то особые задачи.

Пример задания: OCI используется для создания внешних библиотек C/C ++ для Oracle. Это в значительной степени позволяет вам работать практически со всем, что вы хотели бы сделать в Oracle, на мелком уровне зерна. Начните здесь:

http://www.oracle.com/technetwork/database/features/oci/index.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top