Frage

Ich habe einen Legacy Pro*C -Code, der die Art von Konstrukten unten verwendet.
Diese Art von Muster befindet sich in Online -Foren, aber nichts in der Oracle -Dokumentation.
Im Speziellen, Google kann kein Dokument über "SQHSTs" auf der Oracle -Website finden.

Ist dieses Muster irgendwo dokumentiert?
Wird es als gute Programmierpraxis angesehen?

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

(Code kopiert von hier aber ähnlich wie meine)

War es hilfreich?

Lösung

Pro*C erstellt niedrige Stufe C aus Aussagen wie

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

Dies schafft OCI-ähnliche Deskriptoren jedes von Ihnen deklarierenden Datenelements. Andere Aussagen (EXEC SQL ...;) Wenn Sie SQL in diese gebundenen Variablen einbetten, werden sie dann in eine Serie von Aufrufen der niedrigeren Ebene übersetzt, wobei das im Abschnitt deklarierter Abschnitt codiert wurde. Pro*C ist alt. Ich habe vor 25 Jahren an der ersten Beta von Pro*C gearbeitet. ...nicht empfohlen.

Der von der Pro*C-Vorkompilierung generierte Code funktioniert nicht immer perfekt, wenn sie von modernen Compilern mit aktivierten Warnungen zusammengestellt werden. Es soll auch nicht lesbar sein. Wenn Sie OCI -Programmierung lernen möchten, können Sie das bekommen, was los ist. Auch nicht wirklich empfohlen, es sei denn, Sie möchten einige spezielle Aufgaben ausführen.

Beispielaufgabe: OCI wird verwendet, um externe C/C ++ - Bibliotheken für Oracle zu erstellen. Mit fast allem, was Sie in Oracle tun möchten, können Sie so ziemlich auf einem feinen Kornniveau arbeiten. Fang hier an:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top