Lors du développement de logiciels, vous devez souvent exploiter la base de données. Les procédures stockées de la base de données Oracle sont l'une des fonctions très importantes. Grâce aux procédures stockées, nous pouvons encapsuler une logique métier commune dans une bibliothèque de codes réutilisable, simplifiant ainsi le développement et la maintenance du code. Cet article explique comment utiliser le langage C pour appeler la procédure stockée de la base de données Oracle.
Avant de commencer à écrire des programmes C, vous devez installer la base de données Oracle et le client Oracle. Si vous avez déjà installé le client Oracle, vous pouvez ignorer cette étape.
Avant d'installer le client Oracle, vous devez installer la base de données Oracle et créer un utilisateur de base de données pour les tests. Vous pouvez télécharger le client Oracle depuis le site Web officiel d'Oracle et sélectionner la version qui correspond à la version de votre système d'exploitation pour l'installation.
Ce qui suit est un exemple de code qui utilise le langage C pour appeler une procédure stockée Oracle qui interroge les enregistrements spécifiés dans la table utilisateur.
#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; }
Après avoir écrit le code C, nous devons compiler et exécuter le code pour tester si la procédure stockée peut être appelée avec succès.
La commande pour compiler le code C est la suivante :
gcc -o demo demo.c -I$ORACLE_HOME/include -L$ORACLE_HOME/lib -lclntsh
où $ORACLE_HOME est le chemin d'installation du client Oracle.
Pour la compilation sur la plateforme Windows, vous devez -lclntsh
改为-locci
.
Cet article présente comment utiliser le langage C pour appeler la procédure stockée de la base de données Oracle. Il convient de noter que le chemin d'installation du client Oracle doit être configuré et que la compilation du programme C doit être liée au fichier de bibliothèque correct. Dans le travail de développement réel, vous devez également prêter attention à l’écriture des procédures stockées et au traitement de sécurité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!