Bei der Entwicklung von Software müssen Sie häufig die Datenbank betreiben. Die gespeicherten Prozeduren der Oracle-Datenbank sind eine der sehr wichtigen Funktionen. Durch gespeicherte Prozeduren können wir einige gängige Geschäftslogiken in einer wiederverwendbaren Codebibliothek kapseln und so die Entwicklung und Wartung des Codes vereinfachen. In diesem Artikel wird erläutert, wie Sie mithilfe der C-Sprache die gespeicherte Prozedur der Oracle-Datenbank aufrufen.
Bevor Sie mit dem Schreiben von C-Programmen beginnen, müssen Sie die Oracle-Datenbank und den Oracle-Client installieren. Wenn Sie den Oracle-Client bereits installiert haben, können Sie diesen Schritt überspringen.
Bevor Sie den Oracle-Client installieren, müssen Sie die Oracle-Datenbank installieren und einen Datenbankbenutzer zum Testen erstellen. Sie können den Oracle-Client von der offiziellen Website von Oracle herunterladen und die Version auswählen, die Ihrer Betriebssystemversion zur Installation entspricht.
Das Folgende ist ein Beispielcode, der mithilfe der C-Sprache eine gespeicherte Oracle-Prozedur aufruft, die die angegebenen Datensätze in der Benutzertabelle abfragt.
#include <stdio.h> #include <stdlib.h> #include <oci.h> void report_error(OCIError *errhp) { text msgbuf[512]; sb4 errcode = 0; OCIErrorGet((dvoid *) errhp, (ub4) 1, (text *) NULL, &errcode, msgbuf, (ub4) sizeof (msgbuf), OCI_HTYPE_ERROR); fprintf(stderr, "Error code %d, msg: %s\n", errcode, msgbuf); exit(EXIT_FAILURE); } int main() { OCIEnv *envhp; OCIError *errhp; OCIServer *srvhp; OCISession *authp; OCIStmt *stmthp; OCIParam *paramhp; OCIParam *paramhp2; OCIParam *paramhp3; ub4 pos = 0; text *username = (text *) "YOUR_USERNAME"; text *password = (text *) "YOUR_PASSWORD"; text *db = (text *) "YOUR_DATABASE"; text *proc_name = (text *) "YOUR_PROC_NAME"; int user_id = 1; text *name = (text *) malloc(512 * sizeof (text)); sb4 name_len = 0; OCIInitialize((ub4) OCI_DEFAULT, (dvoid *)0, (dvoid * (*)(dvoid *, size_t))0, (dvoid * (*)(dvoid *, dvoid *, size_t))0, (void (*)(dvoid *, dvoid *))0 ); OCIEnvInit((OCIEnv **)&envhp, OCI_DEFAULT, (size_t) 0, (dvoid **) 0); OCIHandleAlloc((dvoid *) envhp, (dvoid **) &errhp, OCI_HTYPE_ERROR, (size_t) 0, (dvoid **) 0); OCIHandleAlloc((dvoid *) envhp, (dvoid **) &srvhp, OCI_HTYPE_SERVER, (size_t) 0, (dvoid **) 0); OCIHandleAlloc((dvoid *) envhp, (dvoid **)&authp, OCI_HTYPE_SESSION, (size_t) 0, (dvoid **) 0); OCIHandleAlloc((dvoid *) envhp, (dvoid **) &stmthp, OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0); OCIAttrSet((dvoid *) srvhp, OCI_HTYPE_SERVER, (dvoid *) db, (ub4) strlen((char *) db), OCI_ATTR_SERVER, errhp); OCIServerAttach(srvhp, errhp, (text *) 0, (sb4) 0, OCI_DEFAULT); OCIAttrSet((dvoid *) authp, OCI_HTYPE_SESSION, (dvoid *) username, (ub4) strlen((char *) username), OCI_ATTR_USERNAME, errhp); OCIAttrSet((dvoid *) authp, OCI_HTYPE_SESSION, (dvoid *) password, (ub4) strlen((char *) password), OCI_ATTR_PASSWORD, errhp); OCISessionBegin(srvhp, errhp, authp, OCI_CRED_RDBMS, OCI_DEFAULT); OCIAttrSet((dvoid *) stmthp, OCI_HTYPE_STMT, (dvoid *) proc_name, (ub4) strlen((char *) proc_name), OCI_ATTR_PROCEDURE_NAME, errhp); OCIStmtPrepare(stmthp, errhp, (text *) "begin YOUR_PACKAGE.YOUR_PROC(:1,:2,:3); end;", (ub4) strlen("begin YOUR_PACKAGE.YOUR_PROC(:1,:2,:3); end;"), OCI_NTV_SYNTAX, OCI_DEFAULT); OCIParamGet(stmthp, OCI_HTYPE_STMT, errhp, (dvoid **)¶mhp, (ub4)1); OCIDefineByPos(stmthp, ¶mhp3, errhp, 3, (dvoid *)&name, (sb4) sizeof(name), SQLT_STR, (dvoid *)&name_len, NULL, OCI_DEFAULT); OCIParamGet(stmthp, OCI_HTYPE_STMT, errhp, (dvoid **)¶mhp2, (ub4)2); OCIBindByPos(stmthp, ¶mhp2, errhp, 2, (dvoid*)&user_id, (sb4)sizeof(user_id), SQLT_INT, (dvoid *)0, (ub2 *)0, (ub2 *)0, 0, (ub4 *)0, OCI_DEFAULT); OCIStmtExecute(authp, stmthp, errhp, (ub4) 0, (ub4) 0, (OCISnapshot *)0, (OCISnapshot *)0, OCI_DEFAULT); printf("user name: %s\n", name); OCIHandleFree((dvoid *) stmthp, OCI_HTYPE_STMT); OCIHandleFree((dvoid *) authp, OCI_HTYPE_SESSION); OCIHandleFree((dvoid *) srvhp, OCI_HTYPE_SERVER); OCIHandleFree((dvoid *) errhp, OCI_HTYPE_ERROR); OCIHandleFree((dvoid *) envhp, OCI_HTYPE_ENV); return 0; }
Nachdem wir den C-Code geschrieben haben, müssen wir den Code kompilieren und ausführen, um zu testen, ob die gespeicherte Prozedur erfolgreich aufgerufen werden kann.
Der Befehl zum Kompilieren von C-Code lautet wie folgt:
gcc -o demo demo.c -I$ORACLE_HOME/include -L$ORACLE_HOME/lib -lclntsh
wobei $ORACLE_HOME der Installationspfad des Oracle-Clients ist.
Für die Kompilierung auf der Windows-Plattform müssen Sie -lclntsh
改为-locci
.
In diesem Artikel wird erläutert, wie Sie mithilfe der C-Sprache die gespeicherte Prozedur der Oracle-Datenbank aufrufen. Es ist zu beachten, dass der Installationspfad des Oracle-Clients eingerichtet werden muss und die Kompilierung des C-Programms auf die richtige Bibliotheksdatei verweisen muss. Bei der eigentlichen Entwicklungsarbeit müssen Sie auch auf das Schreiben gespeicherter Prozeduren und die Sicherheitsverarbeitung achten.
Das obige ist der detaillierte Inhalt vonSo rufen Sie die gespeicherte Prozedur der Oracle-Datenbank mit der Sprache C auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!