|
|
@ -711,67 +711,67 @@ NumCreneau: XXXXX heure début : X Benefice :9999€ nb joueurs : 9999
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\section*{Rappels}
|
|
|
|
\section*{Rappels}
|
|
|
|
Les fonctions \code{connexion}, \code{deconnexion} et \code{sql\_error}
|
|
|
|
%% Les fonctions \code{connexion}, \code{deconnexion} et \code{sql\_error}
|
|
|
|
sont rappell\'ees ci-dessous. Elles ne sont pas \`a r\'e\'ecrire sur
|
|
|
|
%% sont rappell\'ees ci-dessous. Elles ne sont pas \`a r\'e\'ecrire sur
|
|
|
|
vos copies, mais \`a utiliser dans les exercices si besoin.
|
|
|
|
%% vos copies, mais \`a utiliser dans les exercices si besoin.
|
|
|
|
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
%% \begin{verbatim}
|
|
|
|
void connexion()
|
|
|
|
%% void connexion()
|
|
|
|
{ VARCHAR uid[50];
|
|
|
|
%% { VARCHAR uid[50];
|
|
|
|
char login[20];
|
|
|
|
%% char login[20];
|
|
|
|
char passwd[20];
|
|
|
|
%% char passwd[20];
|
|
|
|
printf("Donner votre login : ");
|
|
|
|
%% printf("Donner votre login : ");
|
|
|
|
scanf("%s",login);
|
|
|
|
%% scanf("%s",login);
|
|
|
|
printf("\nDonnez votre mot de passe Oracle : ");
|
|
|
|
%% printf("\nDonnez votre mot de passe Oracle : ");
|
|
|
|
scanf("%s",passwd);
|
|
|
|
%% scanf("%s",passwd);
|
|
|
|
printf("\n");
|
|
|
|
%% printf("\n");
|
|
|
|
strcpy(uid.arr,login);
|
|
|
|
%% strcpy(uid.arr,login);
|
|
|
|
strcat(uid.arr,"/");
|
|
|
|
%% strcat(uid.arr,"/");
|
|
|
|
strcat(uid.arr,passwd);
|
|
|
|
%% strcat(uid.arr,passwd);
|
|
|
|
strcat(uid.arr,"@kirov");
|
|
|
|
%% strcat(uid.arr,"@kirov");
|
|
|
|
uid.len=strlen(uid.arr);
|
|
|
|
%% uid.len=strlen(uid.arr);
|
|
|
|
|
|
|
|
|
|
|
|
EXEC SQL CONNECT :uid;
|
|
|
|
%% EXEC SQL CONNECT :uid;
|
|
|
|
if (sqlca.sqlcode==0)
|
|
|
|
%% if (sqlca.sqlcode==0)
|
|
|
|
printf(" Connexion réussie avec succès.\n\n");
|
|
|
|
%% printf(" Connexion réussie avec succès.\n\n");
|
|
|
|
else
|
|
|
|
%% else
|
|
|
|
{
|
|
|
|
%% {
|
|
|
|
printf ("Problème à la connexion.\n\n");
|
|
|
|
%% printf ("Problème à la connexion.\n\n");
|
|
|
|
exit(1);
|
|
|
|
%% exit(1);
|
|
|
|
}}
|
|
|
|
%% }}
|
|
|
|
\end{verbatim}
|
|
|
|
%% \end{verbatim}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
%% \begin{verbatim}
|
|
|
|
void deconnexion(int validation)
|
|
|
|
%% void deconnexion(int validation)
|
|
|
|
{
|
|
|
|
%% {
|
|
|
|
if (validation == 1)
|
|
|
|
%% if (validation == 1)
|
|
|
|
{ EXEC SQL COMMIT WORK RELEASE;
|
|
|
|
%% { EXEC SQL COMMIT WORK RELEASE;
|
|
|
|
} else
|
|
|
|
%% } else
|
|
|
|
{ EXEC SQL ROLLBACK WORK RELEASE;}
|
|
|
|
%% { EXEC SQL ROLLBACK WORK RELEASE;}
|
|
|
|
printf("Déconnexion sans problème.\n");
|
|
|
|
%% printf("Déconnexion sans problème.\n");
|
|
|
|
}
|
|
|
|
%% }
|
|
|
|
\end{verbatim}
|
|
|
|
%% \end{verbatim}
|
|
|
|
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
%% \begin{verbatim}
|
|
|
|
void sql_error(char *msg)
|
|
|
|
%% void sql_error(char *msg)
|
|
|
|
{ char err_msg[128];
|
|
|
|
%% { char err_msg[128];
|
|
|
|
long buf_len, msg_len;
|
|
|
|
%% long buf_len, msg_len;
|
|
|
|
|
|
|
|
|
|
|
|
EXEC SQL WHENEVER SQLERROR CONTINUE;
|
|
|
|
%% EXEC SQL WHENEVER SQLERROR CONTINUE;
|
|
|
|
|
|
|
|
|
|
|
|
printf("%s\n", msg);
|
|
|
|
%% printf("%s\n", msg);
|
|
|
|
buf_len = sizeof (err_msg);
|
|
|
|
%% buf_len = sizeof (err_msg);
|
|
|
|
sqlglm(err_msg, &buf_len, &msg_len);
|
|
|
|
%% sqlglm(err_msg, &buf_len, &msg_len);
|
|
|
|
|
|
|
|
|
|
|
|
if (msg_len > buf_len)
|
|
|
|
%% if (msg_len > buf_len)
|
|
|
|
msg_len = buf_len;
|
|
|
|
%% msg_len = buf_len;
|
|
|
|
|
|
|
|
|
|
|
|
printf("%.*s\n", msg_len, err_msg);
|
|
|
|
%% printf("%.*s\n", msg_len, err_msg);
|
|
|
|
deconnexion(0);
|
|
|
|
%% deconnexion(0);
|
|
|
|
exit(1);
|
|
|
|
%% exit(1);
|
|
|
|
}
|
|
|
|
%% }
|
|
|
|
\end{verbatim}
|
|
|
|
%% \end{verbatim}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\section*{MEMO}
|
|
|
|
\section*{MEMO}
|
|
|
@ -799,33 +799,33 @@ EXCEPTION
|
|
|
|
END ;
|
|
|
|
END ;
|
|
|
|
\end{verbatim}
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
|
|
\subsection*{Langage PRO*C}
|
|
|
|
%% \subsection*{Langage PRO*C}
|
|
|
|
\begin{verbatim}
|
|
|
|
%% \begin{verbatim}
|
|
|
|
struct {long sqlcode;/* code resultant de l'exécution
|
|
|
|
%% struct {long sqlcode;/* code resultant de l'exécution
|
|
|
|
=0 -> ok,
|
|
|
|
%% =0 -> ok,
|
|
|
|
>0 -> ok avec un code d'état,
|
|
|
|
%% >0 -> ok avec un code d'état,
|
|
|
|
<0 -> erreur */
|
|
|
|
%% <0 -> erreur */
|
|
|
|
struct {
|
|
|
|
%% struct {
|
|
|
|
unsigned short sqlerrml;/*longueur du message*/
|
|
|
|
%% unsigned short sqlerrml;/*longueur du message*/
|
|
|
|
char sqlerrmc[70];/*message d'erreur*/
|
|
|
|
%% char sqlerrmc[70];/*message d'erreur*/
|
|
|
|
} sqlerrm;
|
|
|
|
%% } sqlerrm;
|
|
|
|
long sqlerrd[6];/* seul sqlerrd[2] est utilisé -> donne le nombre de lignes modifiées
|
|
|
|
%% long sqlerrd[6];/* seul sqlerrd[2] est utilisé -> donne le nombre de lignes modifiées
|
|
|
|
UPDATE ou rajoutées par INSERT ou ramenées par un SELECT*/
|
|
|
|
%% UPDATE ou rajoutées par INSERT ou ramenées par un SELECT*/
|
|
|
|
char sqlwarn[8];/*sqlwarn[0] 'W’ -> warning*/
|
|
|
|
%% char sqlwarn[8];/*sqlwarn[0] 'W’ -> warning*/
|
|
|
|
sqlwarn[0] = '' /*-> pas de warning*/
|
|
|
|
%% sqlwarn[0] = '' /*-> pas de warning*/
|
|
|
|
sqlwarn[1] = 'W'/*-> troncation numérique ou char*/
|
|
|
|
%% sqlwarn[1] = 'W'/*-> troncation numérique ou char*/
|
|
|
|
sqlwarn[2] = 'W'/*-> valeur Null est ignore */
|
|
|
|
%% sqlwarn[2] = 'W'/*-> valeur Null est ignore */
|
|
|
|
sqlwarn[3] = 'W'/*-> plus de champs dans SELECT que de variables pour recevoir*/
|
|
|
|
%% sqlwarn[3] = 'W'/*-> plus de champs dans SELECT que de variables pour recevoir*/
|
|
|
|
sqlwarn[4] = 'W'/*-> toutes les lignes d'une table sont touchées (par DELETE ou
|
|
|
|
%% sqlwarn[4] = 'W'/*-> toutes les lignes d'une table sont touchées (par DELETE ou
|
|
|
|
UPDATE par exemple)*/
|
|
|
|
%% UPDATE par exemple)*/
|
|
|
|
sqlwarn[5] /* inutilisé */
|
|
|
|
%% sqlwarn[5] /* inutilisé */
|
|
|
|
sqlwarn[6] = 'W'/*-> Oracle a dû exécuter un rollback */
|
|
|
|
%% sqlwarn[6] = 'W'/*-> Oracle a dû exécuter un rollback */
|
|
|
|
sqlwarn[7] = 'W'/*-> la donnée ramenée par un FETCH a été modifié
|
|
|
|
%% sqlwarn[7] = 'W'/*-> la donnée ramenée par un FETCH a été modifié
|
|
|
|
depuis que la clause SELECT a été executé */
|
|
|
|
%% depuis que la clause SELECT a été executé */
|
|
|
|
} sqlca;
|
|
|
|
%% } sqlca;
|
|
|
|
:var_hote INDICATOR :indicateur
|
|
|
|
%% :var_hote INDICATOR :indicateur
|
|
|
|
:var_hote :indicateur
|
|
|
|
%% :var_hote :indicateur
|
|
|
|
\end{verbatim}
|
|
|
|
%% \end{verbatim}
|
|
|
|
|
|
|
|
|
|
|
|
%\includepdf[pages=-]{MEMO.pdf}
|
|
|
|
%\includepdf[pages=-]{MEMO.pdf}
|
|
|
|
|
|
|
|
|
|
|
|