diff --git a/EXOS/memo.tex b/EXOS/memo.tex new file mode 100644 index 0000000..7a864f9 --- /dev/null +++ b/EXOS/memo.tex @@ -0,0 +1,212 @@ +\documentclass[a4paper,11pt]{article} + +\usepackage[utf8x]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[french]{babel} +\usepackage[a4paper,hmargin=20mm,vmargin=30mm]{geometry}%\usepackage{fullpage} +\usepackage{url} +\usepackage{comment} +\usepackage{fancyhdr}% fancy header +\usepackage{multirow} +\usepackage{slashbox} + +\usepackage{color, colortbl} +\definecolor{Gray}{gray}{0.9} +\usepackage{adjustbox} +\usepackage{slashbox} +%\usepackage{times} +\usepackage{tikz,pgflibraryarrows,pgffor,pgflibrarysnakes} +\usetikzlibrary{decorations.pathreplacing} + +\usepackage{pdfpages} + +\usepackage{fancyvrb} + +\fancypagestyle{monstyle}{ +%\fancyhead{} +\renewcommand{\headrulewidth}{1pt} +%% %\renewcommand{\footrulewidth}{0.4pt} + +% \fancyhead[LE]{\slshape \thepage/ \pageref{LastPage}} +%% \fancyhead[RO]{\slshape \thepage/ \pageref{LastPage}} + + +%\fancyhf{} +%\fancyhead[LE]{\slshape LE} +%\fancyhead[CE]{\slshape CE} +%\fancyhead[RE]{\slshape RE} + +\fancyhead[LO]{\bfseries 2020-2021 BD PLS/SQL\rightmark} +%\fancyhead[CO]{\slshape APF} +\fancyhead[RO]{\bfseries ~\leftmark } + +%% %\fancyfoot{} +% \fancyfoot[LE,RO]{} + \fancyfoot[CO,CE]{}%\slshape\thepage/\pageref{LastPage}} +%% %\fancyfoot[LO,RE]{\small\slshape \ddmmyyyydate version du \today} + +} + +% \pagestyle{fancy} + +\usepackage{amsmath} +\usepackage{amsthm} + + + +\theoremstyle{definition} +\newtheorem{exercice}{Exercice} + +\pagestyle{monstyle} + +\usepackage{amsmath} +\usepackage{amsthm} + +\newcommand{\code}[1]{\texttt{#1}} + +\usepackage{boxedminipage} +\usepackage{setspace} + + +\newsavebox\svbx +\newif\ifcache +\long\def\cache#1{\ \newline + \setbox\svbx=\vbox{\leavevmode \newline \begin{spacing}{1}#1\end{spacing}} + \smallskip\par\noindent + \begin{boxedminipage}{\linewidth} + \ifcache + \leavevmode\hrule height 0pt\vskip \ht\svbx\hrule height 0pt + \else \unvbox\svbx + \fi + \end{boxedminipage} + \par\smallskip} + + +\cachefalse % version prof +%\cachetrue % version etudiant + + + +\begin{document} + + +\section*{Rappels} +Les fonctions \code{connexion}, \code{deconnexion} et \code{sql\_error} +sont rappell\'ees ci-dessous. Elles ne sont pas \`a r\'e\'ecrire sur +vos copies, mais \`a utiliser dans les exercices si besoin. + +\begin{verbatim} +void connexion() +{ VARCHAR uid[50]; + char login[20]; + char passwd[20]; + printf("Donner votre login : "); + scanf("%s",login); + printf("\nDonnez votre mot de passe Oracle : "); + scanf("%s",passwd); + printf("\n"); + strcpy(uid.arr,login); + strcat(uid.arr,"/"); + strcat(uid.arr,passwd); + strcat(uid.arr,"@kirov"); + uid.len=strlen(uid.arr); + + EXEC SQL CONNECT :uid; + if (sqlca.sqlcode==0) + printf(" Connexion réussie avec succès.\n\n"); + else + { + printf ("Problème à la connexion.\n\n"); + exit(1); + }} +\end{verbatim} + + +\begin{verbatim} +void deconnexion(int validation) +{ + if (validation == 1) + { EXEC SQL COMMIT WORK RELEASE; + } else + { EXEC SQL ROLLBACK WORK RELEASE;} + printf("Déconnexion sans problème.\n"); +} +\end{verbatim} + +\begin{verbatim} +void sql_error(char *msg) +{ char err_msg[128]; + long buf_len, msg_len; + + EXEC SQL WHENEVER SQLERROR CONTINUE; + + printf("%s\n", msg); + buf_len = sizeof (err_msg); + sqlglm(err_msg, &buf_len, &msg_len); + + if (msg_len > buf_len) + msg_len = buf_len; + + printf("%.*s\n", msg_len, err_msg); + deconnexion(0); + exit(1); +} +\end{verbatim} + + +\section*{MEMO} +\subsection*{Langage PL/SQL} + +\begin{verbatim} +DECLARE + variable_PL/SQL {type SQL | nom_table.nom_colonne%TYPE | nom_table%ROWTYPE} ; + CURSOR curseur IS SELECT … ; + nom_exception EXCEPTION; +BEGIN + OPEN curseur ; + FETCH curseur INTO liste de variables ; + curseur%FOUND + CLOSE curseur ; + RAISE nom_exception ; + SELECT liste_de_sélection INTO liste de variables FROM … WHERE … ORDER BY ... ; + Variable PL/SQL := ‘&variable_ SQLPlus’ … + IF … THEN … [ELSE …] END IF ; + WHILE … LOOP … END LOOP ; +EXCEPTION + WHEN nom_exception THEN …; + WHEN NO_DATA_FOUND THEN … ; + WHEN OTHERS THEN … : +END ; +\end{verbatim} + +\subsection*{Langage PRO*C} +\begin{verbatim} +struct {long sqlcode;/* code resultant de l'exécution + =0 -> ok, + >0 -> ok avec un code d'état, + <0 -> erreur */ + struct { + unsigned short sqlerrml;/*longueur du message*/ + char sqlerrmc[70];/*message d'erreur*/ + } sqlerrm; + 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*/ + char sqlwarn[8];/*sqlwarn[0] 'W’ -> warning*/ + sqlwarn[0] = '' /*-> pas de warning*/ + sqlwarn[1] = 'W'/*-> troncation numérique ou char*/ + sqlwarn[2] = 'W'/*-> valeur Null est ignore */ + 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 + UPDATE par exemple)*/ + sqlwarn[5] /* inutilisé */ + sqlwarn[6] = 'W'/*-> Oracle a dû exécuter un rollback */ + sqlwarn[7] = 'W'/*-> la donnée ramenée par un FETCH a été modifié + depuis que la clause SELECT a été executé */ +} sqlca; +:var_hote INDICATOR :indicateur +:var_hote :indicateur +\end{verbatim} + +%\includepdf[pages=-]{MEMO.pdf} + +\end{document}