Questo modello pro*c è una specie di best practice o addirittura documentata?
-
28-10-2019 - |
Domanda
Ho un codice Pro*C legacy che utilizza il tipo di costrutti di seguito.
Questo tipo di modello si trova sui forum online ma nulla nella documentazione Oracle.
In particolare, Google non riesce a trovare alcun documento su "SQHST" sul sito Web Oracle.
Questo modello è documentato da qualche parte?
È considerata una buona pratica di programmazione?
/* 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;
(Codice copiato da qui ma simile al mio)
Soluzione
Pro*C crea un livello C basso da dichiarazioni come
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
Che crea descrittori simili a OCI di ciascun elemento di dati che dichiari. Altre dichiarazioni (EXEC SQL ...;
) dove incorpori SQL con quelle variabili legate vengono quindi tradotti in una serie di chiamate di livello inferiore usando ciò che è stato codificato nella sezione Dichiarazione. Pro*c è vecchio. Ho lavorato alla prima beta di Pro*C 25+ anni fa. ...non consigliato.
Il codice generato dalla pre-compilazione di Pro*C non è sempre perfettamente se compilato da moderni compilatori con avvertimenti abilitati. Inoltre non è pensato per essere leggibile. Se vuoi imparare la programmazione OCI, puoi ottenere quello che sta succedendo. Neanche davvero consigliato, a meno che tu non voglia svolgere alcune attività speciali.
Attività di esempio: OCI viene utilizzato per creare librerie C/C ++ esterne per Oracle. Praticamente ti consente di lavorare con quasi tutto ciò che vorresti fare in Oracle, a un livello di grano fine. Comincia qui:
http://www.oracle.com/technetwork/database/features/oci/index.html