Pregunta

Tengo algún código pro*c heredado usando el tipo de construcciones a continuación.
Este tipo de patrón se encuentra en los foros en línea, pero nada en la documentación de Oracle.
En particular, Google no puede encontrar ningún documento sobre "SQHST" en el sitio web de Oracle.

¿Este patrón está documentado en alguna parte?
¿Se considera una buena práctica de programación?

/* 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;

(Código copiado de aquí pero similar al mío)

¿Fue útil?

Solución

Pro*c crea un bajo nivel C a partir de declaraciones como

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

Que crea descriptores similares a OCI de cada elemento de datos que declare. Otras declaraciones (EXEC SQL ...;) donde incrusta SQL con esas variables unidas se traduce a una serie de llamadas de nivel inferior usando lo que se codificó en la sección Declarar. Pro*c es viejo. Trabajé en la primera versión beta de Pro*C hace 25 años. ...no recomendado.

El código generado por la pre-compilación pro*c no siempre lo hace perfectamente cuando se compila con compiladores modernos con advertencias habilitadas. Tampoco está destinado a ser legible. Si desea aprender la programación de OCI, puede obtener lo que está sucediendo. Tampoco se recomienda realmente, a menos que desee hacer algunas tareas especiales.

Tarea de ejemplo: OCI se usa para crear bibliotecas externas de C/C ++ para Oracle. Te permite trabajar con casi cualquier cosa que quieras hacer en Oracle, a un nivel de grano fino. Empieza aqui:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top