sword OCIStmtFetch2(OCIStmt *stmtp, OCIError *errhp, ub4 nrows, ub2 orientation, ub4 scrollOffset, ub4 mode);
Si les résultats sont liés par tableau, alors un paquet d'enregistrements est lu dont la taille est limitée par nrows.
L'orientation de la lecture est donnée par orientation en tenant compte de l'offset scrollOffset par rapport à la position courante. Voici les valeurs possibles de orientation :
En cas d'erreur, un compte-rendu est associé au handle errhp.
Le résultat est OCI_SUCCESS en cas de succès.
#include <ociap.h>
static OCISvcCtx *hConnexion;
static OCIError *hErreur;
static OCIDefine *hTableE;
static long TableE[256];
static ub2 IndicateurTableE[256];
static ub2 TailleTableE[256];
static OCIDefine *hTableC;
static char TableC[256][20];
static ub2 IndicateurTableC[256];
static ub2 TailleTableC[256];
static ub4 NbEnregistrements;
static ub4 Taille;
...
if (OCIDefineByPos(hOrdreSql, &hTableE, hErreur, 1, (dvoid *)TableE, sizeof(long), SQLT_NUM, (dvoid *)IndicateurTableE, IndicateurTableE,
TailleTableE, OCIDEFAULT)!=OCI_SUCCESS)
{
...
}
...
if (OCIDefineByPos(hOrdreSql, &hTableC, hErreur, 2, (dvoid *)TableC, sizeof(char)*20, SQLT_STR, (dvoid *)IndicateurTableC, IndicateurTableC,
TailleTailleC, OCIDEFAULT)!=OCI_SUCCESS)
{
...
}
...
if (OCIStmtPrepare(hOrdreSql, hErreur, (OraText *)"select empno, ename from emp;", 29, OCI_NTV_SYNTAX, OCI_DEFAULT)!=OCI_SUCCESS)
{
...
}
...
if (OCIStmtExecute(hConnexion, hOrdreSql, hErreur, 256, 0, NULL, NULL, OCI_DEFAULT))
{
...
}
...
Taille=sizeof(NbEnregistrements);
if (OCIAttrGet(hOrdreSql, OCI_HTYPE_STMT, (dvoid *)&NbEnregistrements, &Taille, OCI_ATTR_ROW_COUNT, hErreur)!=OCI_SUCCESS)
{
...
}
...
if (OCIStmtFetch2(hOrdreSql, hErreur, 256, OCI_FETCH_NEXT, 0, OCI_DEFAULT))
{
...
}
...
Taille=sizeof(NbEnregistrements);
if (OCIAttrGet(hOrdreSql, OCI_HTYPE_STMT, (dvoid *)&NbEnregistrements, &Taille, OCI_ATTR_ROWS_FETCHED, hErreur)!=OCI_SUCCESS)
{
...
}
...