#include <stdio.h>
#include <stdlib.h>
EXEC SQL INCLUDE SQLCA;
EXEC SQL INCLUDE ORACA;
/* ======================================================================
Recupere des infos sur la derniere erreur
====================================================================== */
int db_erreur(void)
{
log_write("Erreur Oracle : dernier SQL : %s.\n",
oraca.orastxt.orastxtc);
log_write("message court : %d, %s.\n",
sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
if (sqlca.sqlcode < 0) {
char msg_buffer[1000];
int buf_size;
int msg_lg;
buf_size = 1000;
sqlglm(msg_buffer, &buf_size, &msg_lg);
log_write("message long : %*.*s.\n", msg_lg, msg_lg, msg_buffer);
}
return (0);
}
/* ======================================================================
Connexion a la base
====================================================================== */
int db_connect(char *p_user, char *p_pass, char * p_dbstring)
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[20];
VARCHAR password[20];
VARCHAR dbstring[100];
EXEC SQL END DECLARE SECTION;
strcpy(username.arr, p_user);
username.len = strlen(username.arr);
strcpy(password.arr, p_pass);
password.len = strlen(password.arr);
strcpy(dbstring.arr, p_dbstring);
password.len = strlen(password.arr);
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbstring;
EXEC ORACLE OPTION (ORACA=YES);
oraca.oradbgf = 1; /* enable all debug operations */
oraca.orastxtf = 1; /* save the SQL statement text on SQLERROR only */
if (sqlca.sqlcode < 0) {
db_erreur(); return (-1);
}
log_write("Connection OK.\n" );
return (0);
} |