Bonjour à tous,

J'essaye de tester cette section en C qui ne semble pas fonctionner - l'application plante misérablement sur l'ordre OCI_ExecuteStmt.

L'ordre SQL fonctionne correctement sur Oracle iSQL pourtant - auriez vous une idée ?? .. merci !!.

// Unload_Position_2.cpp : Defines the entry point for the console application.
//
#include <stdafx.h>
#pragma comment(lib, "ociliba.lib")

char x;
int i;

char CHAR_SQL[256]="";

int POS_ID_TRACKER;
OCI_Statement *st;
OCI_Resultset *rs;

void err_handler(OCI_Error *err)
{
printf("code : ORA-%05i\n"
"msg : %s\n"
"sql : %s\n",
OCI_ErrorGetOCICode(err),
OCI_ErrorGetString(err),
OCI_GetSql(OCI_ErrorGetStatement(err)));
}

int main()
{
OCI_Connection *cn;
if (!OCI_Initialize(err_handler, NULL, OCI_ENV_DEFAULT))
{
OCI_Cleanup();
return EXIT_FAILURE;
}

cn = OCI_ConnectionCreate("dwh", "source", "ripoux",OCI_SESSION_DEFAULT);

if (cn != NULL)
{
printf(OCI_GetVersionServer(cn));
printf("Server major version : %i\n", OCI_GetServerMajorVersion(cn));
printf("Server minor version : %i\n", OCI_GetServerMinorVersion(cn));
printf("Server revision version : %i\n", OCI_GetServerRevisionVersion(cn));
printf("Connection version : %i\n", OCI_GetVersionConnection(cn));
printf("Connexion OK....\n\n\n");

}
else
{
printf("Erreur de connexion à Oracle !!");
OCI_Cleanup();
return EXIT_FAILURE;
}

st = OCI_StatementCreate(cn);

strcpy(CHAR_SQL,"SELECT POS_ID_TRACKER, POS_LATITUDE, POS_LONGITUDE, ");
strcat(CHAR_SQL,"TO_CHAR(POS_DATETIME_POSITION,'YYYY-MM-DD') , TO_CHAR(POS_DATETIME_POSITION,'HH24') , ");
strcat(CHAR_SQL,"MAX(POS_DATETIME_POSITION), MIN(POS_DATETIME_POSITION) ");
strcat(CHAR_SQL,"FROM POSITION WHERE POS_VITESSE = 0 ");
strcat(CHAR_SQL,"GROUP BY POS_ID_TRACKER, POS_LATITUDE, POS_LONGITUDE, ");
strcat(CHAR_SQL,"TO_CHAR(POS_DATETIME_POSITION,'YYYY-MM-DD'), TO_CHAR(POS_DATETIME_POSITION,'HH24') ");
strcat(CHAR_SQL,"HAVING ");
strcat(CHAR_SQL,"((");
strcat(CHAR_SQL,"(");
strcat(CHAR_SQL,"((TO_NUMBER(TO_CHAR(MAX(POS_DATETIME_POSITION),'MI')))*60) + ");
strcat(CHAR_SQL,"(TO_NUMBER(TO_CHAR(MAX(POS_DATETIME_POSITION),'SS')))");
strcat(CHAR_SQL,")");
strcat(CHAR_SQL," - ");
strcat(CHAR_SQL,"(");
strcat(CHAR_SQL,"((TO_NUMBER(TO_CHAR(MIN(POS_DATETIME_POSITION),'MI')))*60) + ");
strcat(CHAR_SQL,"(TO_NUMBER(TO_CHAR(MIN(POS_DATETIME_POSITION),'SS')))");
strcat(CHAR_SQL,")");
strcat(CHAR_SQL,")/60) > 5");

printf("%s\n",CHAR_SQL);

OCI_ExecuteStmt(st,CHAR_SQL);

rs = OCI_GetResultset(st);

//while (OCI_FetchNext(rs))
//.... blabla...

//printf("\n%d row(s) fetched\n", OCI_GetRowCount(rs));

OCI_ConnectionFree(cn);

OCI_Cleanup();
scanf("%s",&x);
return EXIT_SUCCESS;
}