
                     Database-SQL-RDBMS HOW-TO pour Linux
                (PostgreSQL Object Relational Database System),
                              version franaise.

Al Dev (Alavoor Vasudevan) alavoor@yahoo.com
Adaptation franaise :
Albert-Paul Bouillot apb@club-internet.fr

   v13.0,23 Octobre 1999, (version franaise 28 Octobre 1999)
     _________________________________________________________________

   _Ce document est un "guide pratique" pour la mise en place rapide d'un
   moteur de Base de Donnes SQL et des outils frontaux sur un systme
   Unix. Il traite galement du langage standard International ANSI/ISO
   SQL et passe en revue les mrites/avantages d'un moteur de Base de
   Donnes dvelopp dans le cadre mondial de l'environnement de
   dveloppement ouvert d'internet. Ce document explique COMMENT mettre
   en place une Base de Donnes Relationnelle SQL Objet de la nouvelle
   gnration "PostgreSQL" sur votre systme unix qui pourra tre
   utilise comme Base de Donnes Serveur d'Application ou Serveur Web.
   PostgreSQL implmente un sous-ensemble des normes Internationales ISO
   et ANSI SQL 1998,92,89. Ce document donne aussi des informations sur
   les programmes d'interface  la base de donnes tels que interfaces
   utilisateur graphiques (GUI), outils RAD (Dveloppement Rapide
   d'Application ), interfaage des langages de programmation ("C",
   "C++", Java, Perl), pilotes ODBC, JDBC ainsi que sur les outils et
   programmes interfaage d'une Base de Donnes Web . L'information
   donne ici est valable pour toutes autres plates-formes unix et autres
   Bases de Donnes. Cette information sera trs utile aux nouveaux
   utilisateurs des Bases de Donnes, de PostgreSQL et du langage SQL. Ce
   document comporte aussi un didacticiel SQL et les spcifications de la
   syntaxe SQL qui devrait tre trs utile aux dbutants. Les gens
   expriments trouveront dans ce document un guide de rfrence trs
   pratique. Pour les tudiants, l'information donne ici leur permettra
   d'obtenir le code source du Systme de Gestion de Base de Donnes
   Relationnel (SGBDR) PostgreSQL  partir duquel ils pourront tudier
   comment un moteur de SGBDR SQL est crit._
     _________________________________________________________________

Appendix

1. Introduction

   Le but de ce document est de fournir une liste de pointeurs/URL
   dtaille de faon  mettre rapidement en oeuvre PostgreSQL et de
   mettre en avant l'intrt des systmes  Code Source Ouvert tel que
   PostgreSQL, Linux.

   Tout systme informatique au monde a besoin d'une base de donnes pour
   stocker/retrouver les informations. La premire raison pour laquelle
   on utilise un ordinateur est de stocker, retrouver et traiter
   l'information et de faire cela trs rapidement, et donc, de faire
   conomiser du temps. En mme temps, le systme doit tre simple,
   robuste, rapide, fiable, conomique et d'utilisation aise. La Base de
   Donnes constitue une _PARTIE VITALE DU SYSTME_ des plus importantes
   car elle contient les donnes indispensables de toute compagnie au
   monde. Les systmes de gestion de base de donnes les plus courants
   sont bass sur les spcifications ISO (International Standard
   Organisation) SQL lesquelles sont galement bases sur les normes
   amricaines ANSI SQL. Les spcifications les plus courantes
   gnralement utilises sont l'ISO/ANSI SQL 1992. La prochaine norme,
   encore en cours de dveloppement est la SQL 1998/99 aussi appele
   SQL-3. Les systmes de gestion de bases de donnes les plus rpandus
   tels que Oracle, Sybase et Informix s'appuient sur ces standards ou
   essaient de les implmenter.

   Il y a plus de 20 varits, commerciales/internet, de systmes de
   gestion de base de donnes actuellement utiliss dans le monde et
   beaucoup plus dans un futur proche. En l'absence d'une norme telle que
   l'ANSI/ISO SQL, il serait trs difficile pour l'utilisateur de
   dvelopper une application une fois pour toutes et de l'utiliser avec
   tous les systmes de gestion de bases de donnes. L'utilisateur veut
   dvelopper son application une fois pour toutes en utilisant les
   normes ISO SQL, ODBC, JDBC afin qu'elle puisse tre dploye sur une
   grande varit de systmes de gestion de base de donnes a travers le
   monde.

   PostgreSQL est la Base de Donne LIBRE la plus populaire au monde qui
   implmente la plupart des normes ISO SQL, ANSI SQL/98, SQL/92 et ANSI
   SQL/89 RDBMS. PostgreSQL est une base de donnes relationnelle Objet
   de la nouvelle gnration et les futures normes ANSI SQL tels que le
   SQL 1998 (SQL-3) et au-del traiteront de manire croissante de bases
   de donnes Objet et de types de donnes Objet. PostgreSQL est le seul
   SGBD (RDBMS - Relational Data Base Management System) au monde qui
   supporte les bases de donnes Objet et SQL. Ce document vous explique
   comment installer le systme de gestion de base de donnes, comment
   mettre en place la base de donnes Web, la base de donnes application
   , les frontaux GUIs et les programmes interfaage. On ne saurait trop
   RECOMMANDER d'crire vos applications bases de donnes 100 %
   compatibles avec les normes ISO/ANSI SQL, ODBC, JDBC ceci rendant
   votre application portable sur de multiples SGBD (Systmes de gestion
   de Bases de Donnes) tels que PostgreSQL, Oracle, Sybase, Informix
   etc.

   La haute qualit, et un large ensemble de possibilits de PostgreSQL
   viennent du fait que ce systme est dvelopp suivant le principe du
   Modle de dveloppement  Code Source Ouvert. Les modles  Code
   Source Ouvert sont ceux ou la totalit du code source est fournie et
   ou le dveloppement se fait  travers l'internet par une trs vaste
   communaut de cerveaux humains en rseau. La tendance future des
   dveloppement logiciels rside dans ce que l'on appelle les "super
   autoroutes de l'information" qui s'tendent  travers le monde entier.
   Dans les annes  venir, la croissance d'internet va tre explosive et
   de ce fait favorisera l'adoption de PostgreSQL par la communaut des
   utilisateurs de bases de donnes.

   Par l'application des principes de la statistique, des mathmatiques
   et de la science  la qualit des logiciels, on obtient la meilleure
   qualit des logiciels ' Code Source Ouvert' tel que PostgreSQL en
   mettant le code source des programmes  la disposition d'un grand
   nombre de cerveaux humains interconnects par les super-autoroutes de
   l'information. Plus le nombre de cerveaux au travail sera grand,
   meilleure sera la qualit du logiciel produit. Le modle " Code
   Source Ouvert" vite aussi de _RINVENTER LA ROUE_, supprime _LA
   DUPLICATION DU TRAVAIL_tout en tant particulirement conomique, en
   diminuant les dlais de distribution et en suivant les lois
   conomiques modernes d'optimisation des ressources nationales et
   globales. Une fois qu'un logiciel a t ralis par d'autres, vous
   _N'AVEZ PAS_  recommencer le travail. Vous ne perdrez pas un temps
   prcieux sur quelque chose qui a dj t _CORRECTEMENT_ ralis.
   Votre temps est extrmement prcieux et il faut l'utiliser de manire
   efficace, car vous ne disposez que de 8 heures par jour pour
   travailler!!. Dans un futur proche,  l'aube du 21-ime sicle, la
   manire de se procurer un logiciel va changer. Les utilisateurs
   accorderont en premier lieu leur prfrence aux logiciels ouverts tel
   PostgreSQL, Linux etc...

   En achetant des binaires vous n'obtenez pas la vritable proprit du
   logiciel et ce n'est pas juste. Acheter un logiciel _peut_ devenir une
   attitude archaque. On a seulement besoin d'acheter un bon matriel,
   il vaut mieux dpenser de l'argent en matriel et trouver le logiciel
   sur internet. Le point important, c'est que _le gros du travail_ est
   effectu par le matriel. Le matriel est le cheval de bataille et le
   logiciel est l pour le piloter. Le matriel est tellement plus
   compliqu que seulement 6 pays sur 180 au monde ont dmontr leur
   capacit  concevoir et  fabriquer les composants d'ordinateurs. La
   conception et la fabrication de composants d'ordinateurs est une
   technologie avance. C'est un processus trs complexe, requrant de
   trs larges investissements en usine et en machines de production
   matrisant la technologie des 0.18 micron. Des milliards de
   transistors/circuits sont implants sur une petite puce de silicium.
   Des compagnies telles que Applied Material, AMD, Intel, Cyrix,
   Hitachi, Ibm et autres ont dpens d'importantes quantits
   d'hommes-ans de travail pour matriser des hautes technologies telles
   que la Micro-lectronique et la Nano-lectronique (Micro signifie
   millionime de mtre et Nano signifie milliardime de mtre). La
   technologie actuelle utilise la micro-lectronique  0.35 microns avec
   des conducteurs en aluminium, celle de 0.25 microns utilise des
   conducteurs de cuivre. Dans un futur proche, la technologie des 0.10
   microns avec conducteurs de cuivre et mme la nano-lectronique sera
   utilises pour les circuits intgrs d'ordinateurs. Les conducteurs en
   aluminium seront dtrns par ceux en cuivre sur les puces
   d'ordinateurs, car le cuivre est meilleur conducteur d'lectrons. En
   photo-lithographie, l'extrme ultraviolet, les rayons X ou les
   techniques de faisceau d'electrons seront utilises pour graver des
   circuits de taille infrieure  0.15 microns. Dans environ 20 ans, les
   circuits en silicium seront remplaces par des ordinateurs
   molculaires et des circuits biologiques qui seront des millions de
   fois plus rapides que les circuits en silicium. Les molcules sont des
   groupes d'atomes, et les atomes sont de minuscules particules
   constituant la matire premire premire de tout ce qui nous entoure.
   Les ordinateurs molculaires utiliseront les molcules en tant
   qu'interrupteurs lectroniques ultra rapides. Lorsque l'interrupteur
   est ferm (ON), on obtient la valeur 1 et quand il est ouvert (OFF),
   la valeur 0. Tous les programmes d'ordinateurs au monde utilisent
   l'algbre binaire (nombres 0 et 1). Le tableau ci-dessous montre les
   progrs et les tendances futures des puces d'ordinateurs.

                Progrs dans les capacits des puces dans le futur
                **************************************************
+--------------------------------+--------+--------+--------+--------+-------+-
--------+
| Item/Anne                     | 1997   | 1999   | 2001   | 2003   | 2012  |
 2020   |
+--------------------------------+--------+--------+--------+--------+-------+-
--------+
| Technologie (micron)           | 0.25   | 0.18   | 0.15   | 0.13   | 0.05  |<
 0.00001|
+--------------------------------+--------+--------+--------+--------+-------+-
--------+
| Taille de la puce(mm)          | 200    | 300    | 300    | 300    | 45    |
Mol/bio |
+--------------------------------+--------+--------+--------+--------+-------+-
--------+
| Tension mini. de fonctionnement| 1.8-2.5| 1.5-1.8| 1.2-1.5| 1.2-1.5|0.5-0.6|
< 0.001 |
+--------------------------------+--------+--------+--------+--------+-------+-
--------+
| Puissance dissipe maximum     | 70     | 90     | 110    | 130    | 175   |
 600    |
+--------------------------------+--------+--------+--------+--------+-------+-
--------+
| frquence de fonct. puce  (MHz)| 750    | 1250   | 1500   | 2100   | 10000 |
> 50 000|
+--------------------------------+--------+--------+--------+--------+-------+-
--------+
| Capacit mmoire DRAM          | 256 MB | 1 GB   | 2 GB   | 4 GB   | 256 GB|
> 1000GB|
+--------------------------------+--------+--------+--------+--------+-------+-
--------+

   Comme on peut le voir c'est le matriel qui est important et de haute
   technologie, le logiciel est une technologie moins difficile 
   matriser. Donc la fabrication de matriel est vitale pour l'conomie
   nationale!. Des compagnies comme Compaq, Dell, Sun Microsystems, HP,
   IBM qui fabriquent des ordinateurs contribuent de faon importante 
   l'conomie U.S. aujourd'hui et dans le futur!!

   D'un autre ct, chaque pays au monde dveloppe/produit du logiciel.
   En fait, n'importe qui dans le monde, avec un petit PC conomique,
   peut crer un systme serveur de base de donnes Oracle. Mais cela lui
   prendra environ 10 ans (Le serveur de base de donnes Oracle
   correspond  plus de 10 hommes-ans de travail). Un homme-an correspond
   au travail d'un homme  temps plein pendant une anne. Si 10 personnes
   travaillent pendant un an cela correspond  10 hommes-ans.

   Les SGBD tels que Oracle, Informix, Sybase, IBM DB2 (Unix) sont crits
   en langage "C" et les binaires crs par compilation de ces sources
   sont fournis aux clients. Les SGBD Oracle, Sybase, Informix sont des
   programmes "C"  100 %!!.

   Puisqu'une masse importante de travail a t effectue sur PostgreSQL
   au cours des 14 dernires annes, cela n'aurait aucun sens de recrer
   ex-nihilo un autre systme de gestion de base de donnes satisfaisant
   aux normes ANSI/ISO SQL. Il est bien plus intressant de prendre le
   code existant de PostgreSQL, de commencer  l'utiliser, de l'amliorer
   et d'y ajouter les fonctionnalits manquantes.

   PostgreSQL n'est pas seulement un SGBD libre mais aussi un "Produit
   Internet" de bonne qualit.

   On peut prdire que la demande de produits "Fabriqu sur Internet" va
   crotre exponentiellement. Ces produits tant de haute qualit, de
   faible cot et ayant une base d'utilisateurs et de dveloppeurs
   extrmement large. Les pays qui n'utilisent pas les produits "Fabriqu
   sur Internet" seront les oublis de "la Rvolution mondiale Internet"
   et resteront loin derrire les autres pays. La raison provient de ce
   "qu'Internet" lui-mme est la _PLUS GRANDE_ compagnie de logiciels!

2. Autres Formats de ce Document

   Ce document est publi en 10 formats diffrents qui sont - DVI,
   Postscript, Latex, LyX, GNU-info, HTML, RTF(Rich Text Format), Texte
   simple, Pages de manuel Unix et SGML.
     * Vous pouvez obtenir ce document HOWTO en tant que fichier tar dans
       les formats HTML, DVI, Postscript ou SGML de -
       ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/other-formats/
     * Le format texte simple se trouve dans:
       ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO
     * Des traductions dans d'autres langues telles que le Franais,
       l'Allemand, l'Espagnol, le Chinois se trouvent dans
       ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO Toute aide que vous
       pourriez apporter pour le traduire dans d'autres langues sera la
       bienvenue.

   Ce document est rdig  l'aide d'un outil appel "SGML tool" que l'on
   peut obtenir de - http://www.xs4all.nl/~cg/sgmltools/ Pour compiler le
   texte source, vous utilisez des commandes telles que :
     * sgml2html databasehowto.sgml (pour gnrer un fichier html)
     * sgml2rtf databasehowto.sgml (pour gnrer un fichier RTF)
     * sgml2latex databasehowto.sgml (pour gnrer un fichier latex)

   Ce document se trouve  -
     * http://sunsite.unc.edu/LDP/HOWTO/PostgreSQL-HOWTO.html

   Vous pouvez galement le trouver sur les sites miroirs suivants -
     * http://www.caldera.com/LDP/HOWTO/PostgreSQL-HOWTO.html
     * http://www.WGS.com/LDP/HOWTO/PostgreSQL-HOWTO.html
     * http://www.cc.gatech.edu/linux/LDP/HOWTO/PostgreSQL-HOWTO.html
     * http://www.redhat.com/linux-info/ldp/HOWTO/PostgreSQL-HOWTO.html
     * Vous pouvez trouver d'autres sites miroirs proches de chez vous
       (au sens d'adresse rseau) 
       http://sunsite.unc.edu/LDP/hmirrors.html choisissez un site et
       allez dans le rpertoire /LDP/HOWTO/PostgreSQL-HOWTO.html

   Pour visualiser le document au format dvi, utilisez le programme xdvi.
   Le programme xdvi se trouve dans le paquetage tetex-xdvi*.rpm de
   Redhat Linux que l'on trouve en choisissant les menus  : Panneau de
   contrle | Applications | Publication | TeX. Pour lire le document,
   tapez la commande -

        xdvi -geometry 80x90 howto.dvi
  man xdvi

   Et redimensionnez l'cran  l'aide du mulot. Consultez la page de
   manuel concernant xdvi. Pour naviguer dans le document, utilisez les
   touches Flches, Page prcdente ,Page suivante. Vous pouvez aussi
   utiliser les lettres 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' pour vous
   dplacer vers le haut, vers le bas, au centre, vers la page
   prcdente, Pour dsactiver le menu expert, tapez 'x'.

   Vous pouvez lire le fichier postscript en utilisant le programme 'gv'
   (ghostview) ou 'ghostscript'. Le programme ghostscript se trouve dans
   le paquetage ghostscript*.rpm et le programme gv dans le paquetage
   gv*.rpm de Linux Redhat que l'on peut trouver en choisissant les menus
   : Panneau de contrle | Applications | Graphique. Le programme gv est
   beaucoup plus convivial que ghostscript. Les programmes ghostscript et
   gv sont disponibles sous d'autres plates-formes telles que OS/2,
   Windows 95 et NT, vous pouvez donc visualiser ce document sur ces
   plates-formes. Pour lire le document postscript tapez la commande -

                gv howto.ps

   _ATTENTION: _ce document est volumineux, le nombre total de pages
   (postscript) imprimes est approximativement de 134.

   Vous pouvez lire ce document en format HTML en utilisant Netscape
   Navigator, Microsoft Internet explorer, Redhat Baron Web browser ou
   n'importe lequel des 10 butineurs web.

   Vous pouvez le lire en format latex de sortie de LyX en utilisant LyX,
   frontal X-Window pour latex.

3. Les lois de la Physique s'appliquent au logiciel !

   Dans ce chapitre, on montrera comment la science joue un rle
   important dans la cration de nombreux objets comme le logiciel, cet
   univers, la masse, les atomes, les nergies et mme vous-mme !. Ce
   chapitre montre galement pourquoi il est important d'avoir des
   connaissances en science AVANT de commencer  en utiliser les
   produits. Tout en fait partie - par exemple PostgreSQL, le temps, la
   masse, l'nergie, les plantes, le soleil, la lune, les toiles, les
   super-amas, les humains etc... sont des objets crs par la science.
   Ce chapitre montre galement comment les lois de la science et les
   statistiques tmoignent en faveur de systmes  code source ouvert
   comme PostgreSQL et Linux. La vitesse d'internet s'accroissant de jour
   en jour, et internet devenant de PLUS EN PLUS fiable, les systmes 
   code source ouvert gagnent rapidement de l'audience. Et, si les rgles
   de la statistique et les lois de la physique sont correctes, les
   systmes  code source ferms sont appels  DISPARATRE de cette
   plante.

   Les paragraphes ci-dessous montreront - "combien la science est vaste,
   combien elle est importante pour les hommes et quel est son impact sur
   des projets logiciels comme PostgreSQL, Linux".

   Le dveloppement d'un projet tel que PostgreSQL requiert des
   ressources telles que de l'nergie et du temps, de ce fait, PostgreSQL
   est un produit d'nergie et de temps. Puisque l'nergie et le temps ne
   peuvent d'expliquer que par la science, il y a une corrlation directe
   entre la physique et les projets tels que PostgreSQL, Linux.

   Les lois des sciences (Physique) s'appliquent partout, toujours, 
   tout ce que vous faites et mme aux projets logiciels. La physique est
   en action pendant que vous parlez (ondes sonores), marchez (frottement
   entre le sol et vos pieds), lisez un livre ou crivez un logiciel.
   Diffrentes branches des sciences, telles que la physique, la chimie,
   etc... se rejoignent toutes dans un vaste ensemble, les mathmatiques
   (galement nommes Reine des Sciences).

   Et tout, dans ce monde, a des racines profondes dans les
   mathmatiques, y compris PostgreSQL. PostgreSQL utilise L'algbre
   moderne qui constitue une petite branche des mathmatiques. L'algbre
   moderne concerne la Thorie des ensembles , l'algbre
   relationnelle, la science des Groupes, des Anneaux, les Collections,
   Ensembles, Unions, Intersections, Exclusions,Domaines, Listes, etc...

   Un logiciel tel que PostgreSQL existe aujourd'hui grce  l'nergie et
   au temps. C'est l'nergie qui a cr ce monde, les cerveaux humains et
   beaucoup d'autres choses!. Et, la masse et l'nergie sont UNE et la
   _MME_ entit!. Il y a 100 ans, le fait que la masse et l'nergie
   soient la mme chose n'tait pas connu des gens !

   Les cellules des cerveaux humains consomment de l'nergie en
   travaillant ( la cration d'un logiciel), transformant de l'nergie
   chimique en chaleur. Mme pendant la lecture de ce paragraphe, les
   cellules de votre cerveau consomment du carburant et utilisent de
   l'nergie. Donc INTERROMPEZ IMMDIATEMENT VOTRE LECTURE!

   L'nergie rsultant de l'activit des neurones (cellules du cerveau)
   peut tre mesure en laboratoire. Par exemple, il y a de nombreux
   instruments comme le "dtecteur de mensonge" et autres instruments
   mdicaux qui peuvent mesurer l'activit du cerveau. Tout cela
   sous-entend que le cerveau humain est une machine thermodynamique. Et
   comme le cerveau humain est une machine thermodynamique, les lois de
   la thermodynamique d'appliquent au cerveau et, par consquent, la
   thermodynamique a des effets indirects sur les logiciels comme
   PostgreSQL.

   Suivant la science, il est impossible de construire tout systme ou
   thorie (y compris un systme logiciel de gestion de base de donnes)
   qui soit parfait  100 % et sans erreur. C'est comme poursuivre un
   mirage, nous ne pourrons _JAMAIS_ atteindre l'objectif d'obtenir la
   perfection dans un systme ou une thorie. Les quations/discussions
   mathmatiques dtailles pour prouver qu'un "systme parfait" (de mme
   pour prouver qu'un "systme imparfait") est impossible sont des sujets
   avancs et hors sujet dans ce document. Et une telle tude
   mathmatique implique la prise en compte d'un nombre infini de
   dimensions (ainsi que les dimensions primaires) que l'on trouve dans
   la nature. Malheureusement, les humains ne peuvent voir et
   conceptualiser que 4 dimensions alors que les mathmatiques peuvent
   facilement en explorer beaucoup d'autres. Les autres dimensions sont
   _"infiniment plus petites"_ que les atomes, et les atomes eux-mmes
   sont si minuscules que les yeux humains ne peuvent pas les voir ! Pour
   analyser et expliquer la naissance et la mort de notre univers, les
   mathmatiques constituent un outil trs puissant. Notre univers, si
   vous le regardez  partir d'un autre univers possde pratiquement une
   _taille nulle_ et vice versa. Ce qui signifie que notre univers n'est
   pas visible (n'existe pas) pour les gens d'un autre univers ! Et vice
   versa ! Thoriquement, il est possible de sortir de notre univers et
   de voyager sur des distances immenses (milliard d'annes lumire) en
   un temps nul et de rentrer en un point diffrent de l'espace-temps !.
   La distance entre notre univers et les autres univers est en ralit
   nulle !.

   Bien qu'il y ait un nombre infini de dimensions, celles-ci peuvent
   tre dduites/gnres  partir d'un nombre restreint de dimensions
   PRIMAIRES. C'est--dire qu'un nombre infini de dimensions peut se
   combiner et se ramener aux dimensions primaires. Les dimensions
   primaires absorbent simplement les autres dimensions sans tre
   dtruites. Les mathmaticiens utilisent ces dimensions primaires pour
   comprendre la naissance et la mort des univers. L'univers o vous
   vivez actuellement a commenc  exister lors d'un _BIG BANG_, caus
   par les interactions de particules atomiques d'autres dimensions, qui
   s'est produit il y a des milliards d'annes (environ 20 milliards
   d'annes). Juste avant le big bang il y avait un petit point o la
   longueur, la largeur, la hauteur et le temps taient NULS (
   c'est--dire que notre univers N'EXISTAIT PAS !!) alors que d'autres
   univers et les dimensions primaires existaient. Le temps lui-mme
   n'existait PAS l et les atomes, les toiles, les plantes et les
   galaxies n'existaient PAS! Les atomes qui sont  l'intrieur de notre
   corps n'existaient PAS !!. Tellement de choses se sont passes AVANT
   qu le temps n'existe !

   Le big bang et donc la naissance de notre univers rsulte de quelques
   atomes de dimensions primaires. _QUELQU'UN_, (quelque chose ?), a
   caus le fracassement de quelques atomes minuscules d'autres
   dimensions pour crer notre univers, et de nouvelles dimensions de
   temps, de longueur, de largeur et de hauteur taient nes !. Nous
   voyons l'effet d'une quelconque main dans se processus. Ce processus
   _n'est pas parfaitement compris_ par les hommes. Ceux-ci essaient de
   gnrer un autre univers en laboratoire en simulant le big bang (Un
   acclrateur trs puissant est en construction en Europe, un autre, en
   cours de construction  Dallas, aux USA, a t arrt par le congrs
   US pour cause de coupes budgtaires). Il y a des atomes dans d'autres
   dimensions exactement comme nous avons des atomes dans notre univers.
   Thoriquement, on peut crer/gnrer un nombre infini d'univers !. Ce
   processus est rversible, ce qui veut dire que notre univers peut
   compltement s'effondrer sur lui-mme et disparatre en quelques
   atomes d'autres dimensions !. C'est une analogie similaire  la faon
   dont VOUS tes ns  partir de de deux cellules minuscules qui se sont
   FRACASSES l'une contre l'autre pour crer une cellule unique. Cette
   toute petite cellule s'est divise et multiplie en 6 billions de
   cellules pour devenir cet tre humain de 1.80 mtre (que vous tes !).
   Il y a une ressemblance entre les tres humains et les univers qui
   naissent puis meurent, un peu comme les humains.

   Puisqu'un tat PARFAIT (comme IMPARFAIT) est impossible, des univers
   comme le ntre sont ns et plus tard mourront selon un processus
   cyclique. MAIS il ne peut pas y avoir de mort PARFAITE, seules des
   transformations sont permises par la science !. Actuellement notre
   univers est en expansion  un rythme formidable, il n'est pas statique
   mais trs dynamique. Cet univers continuera son expansion jusqu' ce
   que quelque chose interfre pour entraner son effondrement par
   l'application de pressions ayant des dimensions externes qui
   l'annihileront !!. Il y a deux possibilits  : suppression de masse de
   l'univers via les trous noirs (processus lent), ou ajout de masse 
   l'univers via les trous blancs (processus rapide d'un big crunch). Des
   millions d'univers peuvent exister mais seuls trs peu d'univers
   peuvent tre btis  partir des dimensions primaires. Vous n'tes pas
   constitus uniquement d'atomes de cet univers mais aussi d'atomes
   d'autres dimensions !. Dans les trous noirs les atomes et les
   particules de notre univers sont engloutis et entirement transforms
   et convertis en particules d'autres dimensions !. Au centre d'un trou
   noir, le temps est nul comme le sont la longueur, la largeur et la
   hauteur !. Et le trou noir constitue la porte d'ENTRE/SORTIE pour
   d'autres univers. Ces portes d'entre/sortie peuvent s'ouvrir
   n'importe o, mme  l'intrieur de votre corps !

   Il peut y avoir un nombre infini de couleurs, de langages
   informatiques, d'architectures de circuits d'ordinateurs et de
   thories, mais il NE PEUT PAS y avoir LA PERFECTION pour UN(E) SEUL(E)
   couleur, langage informatique, architecture ou systme ! Vous ne
   pouvez obtenir qu'une couleur (longueur d'onde, qu'un systme, qu'une
   base de donnes ou une thorie PRESQUE PARFAITE ! La nature est comme
   un kalidoscope.

   En combinant les nergies de millions de personnes  travers le monde
   via internet il est possible d'obtenir un systme _PRESQUE PARFAIT_ (y
   compris un systme logiciel de gestion de base de donnes). Prise
   individuellement, l'nergie de chacun est microscopique, mais en
   mettant en rseau un trs grand nombre de personnes, l'nergie totale
   sera norme, et elle peut tre canalise pour crer un systme presque
   parfait. Les tres humains sont des cratures  l'nergie et aux
   ressources finies, ports  faire des erreurs allant de la plus
   triviale  la plus profonde. Puisque notre propension  faire des
   erreurs varie largement en fonction de qualifications particulires,
   d'exprience particulire et des humeurs du moment, la dcouverte et
   l'limination des erreurs logicielles dues  des erreur humaines
   ordinaires peut tre largement facilite en concentrant un grand
   nombre d'esprits humains  ce problme.

   Il est trs clair qu'internet peut mettre en rseau un grand nombre de
   personnes, ce qui implique qu'internet possde beaucoup d'nergie et
   de temps qui peuvent crer des produits logiciels de bien meilleure
   qualit, en un temps plus court, que des compagnies commerciales. Mme
   de grandes compagnies comme Microsoft, IBM ne peuvent pas s'affranchir
   des lois de la physique mais finalement _SE PLIER_ aux lois de la
   science !

   Aujourd'hui, il y a beaucoup trop de systmes de base de donnes
   relationnelles SQL RDBMS dans le monde se rfrant  une spcification
   ANSI/ISO SQL unique. _L'humanit ne doit pas perdre son temps  crer
   de trop nombreux paquetages logiciels SIMILAIRES OU IDENTIQUES _alors
   qu'il y a trop d'autres sujets en sciences qui mriteraient
   l'attention.

   En conclusion,  cause des lois de la science, les systmes  "code
   source ouvert" comme PostgreSQL, Linux seront toujours meilleurs que
   les systmes  "code source ferm", et il est possible de prouver
   cette affirmation scientifiquement.

4. Qu'est-ce que PostgreSQL ?

   PostgreSQL Version 6.5.2 est un SGBD libre, son code source complet
   est fourni. De plus, c'est un SGBD Relationnel-Objet pratiquement
   conforme (de plus en plus conforme) aux normes ANSI SQL1998,92,89. Il
   fonctionne sur diverses plates-formes matrielles sous diffrents
   Systmes d'Exploitation.

        Quelquefois des corrections urgentes d'erreurs sont diffuses aprs la
diffusion
        d'une rvision de PostgreSQL. Vous pouvez appliquer ces rustines option
nelles
        selon les besoins de votre application. Effectuez les tapes suivantes
pour
        appliquer ces rustines -
                cd /usr/src/postgresql6.5.2
    man patch
                patch -p0 < patchfile
                make clean
                make

   Les fichiers de mise  jour se trouvent dans
     * Rustines PostgreSQL : ftp://ftp.postgresql.org/pub/patches

   L'objectif ultime et le but final de PostgreSQL est de devenir
   compatible  100 %  la norme ANSI/ISO SQL ainsi que de devenir le
   numro UN mondial des systmes de gestion de Base de Donnes ouverts
   gnriques. PostgreSQL guidera, conduira, contrlera, suivra et
   dictera le futur de l'ANSI/ISO SQL. C'est--dire, l'implmentation et
   les ides apparatront en premier dans PostgreSQL puis, plus tard,
   seront incorpors dans l'ANSI/ISO SQL. PostgreSQL reprsente "l'tat
   de l'art" de la technologie des bases de donnes.

   Le serveur Informix Universal (diffus en 1997) est bas sur une
   version prcdente de PostgreSQL car Informix a achet Illustra Inc.
   et l'a intgre  Informix. La base de donnes Illustra tait
   compltement base sur Postgres (version prcdente de PostgreSQL).

   PostgreSQL est une amlioration du SGBD POSTGRES, prototype de
   recherche de SGBD de la prochaine gnration. PostgreSQL, tout en
   conservant le puissant modle de donnes et la richesse des types de
   donnes de POSTGRES, remplace le langage de requte PostQuel par un
   sous-ensemble tendu de SQL.

   Le dveloppement de PostgreSQL est ralis par une quipe de
   dveloppeurs Internet qui sont tous inscrits  la liste de diffusion
   "PostgreSQL dveloppement mailing list". Son coordinateur actuel est
   Marc G. Fournier
     * scrappy@postgreSQL.org

   Cette quipe est maintenant responsable des dveloppements actuels et
   futurs de PostgreSQL. Naturellement, l'utilisateur de la base de
   donnes est lui-mme dveloppeur de PostgreSQL!. La charge de
   dveloppement est rpartie au sein d'un grand nombre d'utilisateurs
   finaux de bases de donnes sur internet.

   Les auteurs de PostgreSQL 1.01 sont Andrew Yu et Jolly Chen. De
   nombreux autres ont contribu au portage, aux tests,  la mise au
   point et a l'amlioration du code. Le code original Postgres, duquel
   PostgreSQL est issu, est le rsultat de l'effort de nombreux tudiants
   de troisime cycle, de deuxime cycle et d'enseignants sous la
   direction du Professeur Michael Stonebraker de l'universit de
   Californie, Berkeley.

   Le nom original du logiciel  Berkeley tait Postgres. Lors de l'ajout
   des fonctionnalits SQL en 1995, il fut renomm Postgres95. Ce nom fut
   chang  la fin de 1996 en PostgreSQL.

   Des millions d'exemplaires du SGBD PostgreSQL sont installs comme
   serveurs, serveurs Web et serveurs d'application. Ce SGBD est trs
   avanc, c'est un SGBD Relationnel-Objet (ORDBMS).

   PostgreSQL peut stocker plus de types de donnes que les types
   traditionnels entier, caractres, etc. - L'utilisateur peut crer des
   types, des fonctions, de l'hritage de type etc. PostgreSQL fonctionne
   sur Solaris, SunOS, HPUX, AIX, Linux, Irix, Digital Unix, BSDi,
   NetBSD, FreeBSD, SCO unix, NEXTSTEP, Unixware et toutes sortes d'unix.
   Un portage pour Windows 95/NT est en cours de ralisation.
     * Titre : PostgreSQL SQL RDBMS Database (Systme de Gestion de Base
       de Donnes Relationnelle Objet)
     * Version actuelle : 6.5.2
     * Age : PostgreSQL a 14 ans. En dveloppement depuis 1985
     * Auteurs : Dvelopp par des millions d'universits/compagnies sur
       internet au cours de ces 14 dernires ANNES

   PostgreSQL et les lments qui s'y rapportent dans ce document sont
   couverts par le COPYRIGHT de l'Universit de Californie, Berkeley.

5. O le trouver?

   On peut acheter le CDROM Linux Redhat 5.0, le CDROM Linux Debian ou le
   CDROM Linux Slackware qui contiennent dj postgresql sous forme de
   paquetage (a la fois en code source et en binaires) au :
     * site Web Linux System Labs : http://www.lsl.com/ (7 U.S. dollars)
     * site Web Cheap Bytes Inc : http://www.cheapbytes.com/ (7 U.S.
       dollars)
     * site Web Principal Debian : http://www.debian.org/vendors.html

   L'organisation PostgreSQL vend un 'CDROM PostgreSQL' qui contient le
   code source complet et les binaires pour de nombreux systmes
   d'exploitation Unix, ainsi que la documentation complte.
     * CDROM PostgreSQL au site Web principal  :
       http://www.postgresql.org 30 (U.S. dollars)

   Distributions uniquement en binaire de PostgreSQL :
     * On peut excuter PostgreSQL sans compiler le source. Rcuprer les
       binaires pour Intel-Linux de l'url
       ftp://www.redhat.com/pub/contrib/i386/ le fichier se nomme
       postgresql-6.5.2.i386.rpm. Son format est de type paquetage redhat
       'rpm'. Il contient  la fois le source et les binaires de
       PostgreSQL.
     * Sites binaires pour Solaris, HPUX, AIX, IRIX, Linux :
       ftp://ftp.postgresql.org/pub/bindist Si vous faites une
       compilation pour n'importe laquelle des plates-formes envoyer le
       binaire  ce site, cela peut tre utile aux autres.
     * site ftp : rcuprer les binaires pour Intel-Linux de
       ftp://ftp.redhat.com/pub/contrib/i386/ le fichier se nomme
       postgresql-6.5.2.i386.rpm. Son format est de type paquetage redhat
       'rpm'. Il contient  la fois le source et les binaires de
       PostgreSQL.

   Sites WWW Web :
     * Site Web primaire : http://www.postgresql.org/
     * Site Web secondaire : http://logical.thought.net/postgres95/
     * http://www.itm.tu-clausthal.de/mirrors/postgres95/
     * http://s2k-ftp.cs.berkeley.edu:8000/postgres95/
     * http://xenium.pdi.net/PostgreSQL/
     * http://s2k-ftp.cs.berkeley.edu:8000/postgres95/

   Les sites ftp sont indiqus ci-dessous :-
     * Primaire FTP : ftp://ftp.postgresql.org/pub
     * Secondaire FTP : ftp://ftp.chicks.net/pub/postgresql
     * ftp://ftp.emsi.priv.at/pub/postgres/
     * ftp://ftp.itm.tu-clausthal.de/pub/mirrors/postgres95
     * ftp://rocker.sch.bme.hu/pub/mirrors/postgreSQL
     * ftp://ftp.jaist.ac.jp/pub/dbms/postgres95
     * ftp://ftp.luga.or.at/pub/postgres95
     * ftp://postgres95.vnet.net:/pub/postgres95
     * ftp://ftpza.co.za/mirrors/postgres
     * ftp://sunsite.auc.dk/pub/databases/postgresql
     * ftp://ftp.task.gda.pl/pub/software/postgresql
     * ftp://xenium.pdi.net/pub/PostgreSQL

   Le code source de PostgreSQL est aussi disponible sur tous les sites
   miroirs de sunsite.unc (soit environ 1000 sites autour du globe). Il
   se trouve dans la distribution Linux Red Hat dans le fichier
   /pub/contrib/i386/postgresql.rpm.
     * Pour obtenir la liste des sites miroirs aller  l'url
       ftp://sunsite.unc.edu

6. PostgreSQL  grands pas

   Ce chapitre est destin  vous aider  installer et  faire tourner la
   base de donnes trs rapidement, en moins de 10 minutes.

6.1 Installation et tests

   tapes rapides pour installer, tester, vrifier et faire tourner
   PostgreSQL Connectez-vous en tant qu'utilisateur _root_.
     _________________________________________________________________

# rpm -qpl postgre*.rpm (pour consulter la liste des fichiers. Pour la document
ation 'man rpm')
# rpm -qpi postgre*.rpm (pour prendre connaissance des informations concernant
le paquetage)
# cat /etc/passwd | grep postgres
     _________________________________________________________________

   Note: Si vous voyez un utilisateur 'postgres', vous pouvez avoir 
   faire une sauvegarde et un nettoyage du rpertoire  postgres et 
   supprimer l'utilisateur unix 'postgres', une autre solution consiste 
   renommer l'utilisateur unix 'postgres' en quelque chose du genre
   'postgres2'. L'installation doit tre effectue dans un "rpertoire
   propre".
     _________________________________________________________________

# rpm -i postgre*.rpm (Doit installer tous les paquetages clients, devel, data
        et main pour que pgaccess puisse fonctionner )
# chkconfig --add postgresql  (pour lancer pg durant le dmarrage, voir 'man
chkconfig')
# cp /usr/lib/pgsql/python/_pg.so /usr/lib/python1.5/lib-dynload (pour
python)
# /etc/rc.d/init.d/postgresql start  (pour lancer postgres)
# su - postgres
bash$ createdb mydatabase  (ceci va crer une base de donnes de nom  :
'mydatabase')
                 (pour lire la documentation 'man createdb')
bash$ psql mydatabase   (pour lire la documentation 'man psql')
..... dans psql utilisez les flches haut/bas ou \s pour visualiser l'historiqu
e
bash$ export DISPLAY=<hostname>:0.0; pgaccess mydatabase; (consulter 'man
pgaccess')
     _________________________________________________________________

   Ds maintenant, vous pouvez commencer  taper des commandes SQL pour
   pgaccess ou psql !!
     _________________________________________________________________

bash$ cd /usr/doc/postgresql*
     _________________________________________________________________

   Arriv l, lisez toutes les FAQ, les manuels du programmeur et de
   l'administrateur ainsi que les documents de prise en main (tutorials)
   existants.

   Pour obtenir des informations complmentaires concernant PostgreSQL,
   consultez http://www.postgresql.org

6.2 Maximum RPM

   Tlchargez le livre 'Maximum RPM'  l' http://www.RPM.org. le nom du
   fichier est maximum-rpm.ps.gz Lisez-le sous Linux en utilisant la
   commande gv -
     _________________________________________________________________

# gv maximum-rpm.ps.gz
     _________________________________________________________________

6.3 Test de PyGreSQL - Interface Python
     _________________________________________________________________

bash$ cd /usr/lib/pgsql/python
bash$ createdb thilo
bash$ psql thilo
thilo=> create table test (aa char(30), bb char(30) );
bash$ /usr/bin/python
>>> import _pg
>>> db = _pg.connect('thilo', 'localhost')
>>> db.query("INSERT INTO test VALUES ('ping', 'pong')")
>>> db.query("SELECT * FROM test")
eins|zwei
----+----
ping|pong
(1 row)
>>>CTRL+D
bash$
..... Wow! Cela a l'air de fonctionner - maintenant, installons-le proprement
bash$ su - root
# cp /usr/lib/pgsql/python/_pg.so /usr/lib/python1.5/lib-dynload
     _________________________________________________________________

6.4 Test de Perl - Interface Perl
     _________________________________________________________________

bash$ cd /usr/doc/postgresql-6.5.2/examples/perl5
     _________________________________________________________________

   Note: La variable globale @INC doit inclure le module Pg.pm dans le
   rpertoire site_perl donc utilisez l'option -I ci-dessous
     _________________________________________________________________

bash$ perl -I/usr/lib/perl5/site_perl/5.004/i386-linux-thread ./example.newstyl
e
     _________________________________________________________________

   .... Re_Wow! Vous avez fait tourner un perl qui accde  la base de
   donnes PostgreSQL!!

   Prenez connaissance des fichiers d'exemples pour l'utilisation de
   l'interface perl.

6.5 Test des interfaces libpq, libpq++
     _________________________________________________________________

bash$ cd /usr/doc/postgresql-6.5.2/examples/libpq++
bash$ su root   --> to change ownership of examples
# chown -R postgres /usr/doc/postgresql-6.5.2/examples
# exit
bash$ g++ testlibpq0.cc -I/usr/include/pgsql -I/usr/include/pgsql/libpq++
-lpq++ -lpq -lcrypt
bash$ ./a.out  (Note: Ignore Error messages if you get any - as below)
> create table foo (aa int, bb char(4));
No tuples returned...
status = 1
Error returned: fe_setauthsvc: invalid name: , ignoring...
> insert into foo values ('4535', 'vasu');
No tuples returned...
status = 1
Error returned: fe_setauthsvc: invalid name: , ignoring...
> select * from foo;
aa   |bb   |
-----|-----|
4535 |vasu |
Query returned 1 row.
>
>CTRL+D
bash$
     _________________________________________________________________

   .... Hourra!! Vous venez de faire tourner les interfaces directes de
   C/C++  la base de donnes PostgreSQL!!

6.6 Test des interfaces Java

   Pour pouvoir effectuer ceci vous DEVEZ installer le paquetage
   jdk-*glibc*.rpm (paquetage Java RPM)
     _________________________________________________________________

bash$ cd /usr/doc/postgresql-6.5.2/examples/jdbc
bash$ echo $CLASSPATH
 --> Devrait afficher  CLASSPATH=/usr/lib/jdk-1.1.6/lib/classes.zip
bash$ export CLASSPATH=$CLASSPATH:.:/usr/lib/pgsql/postgresql.jar
Editer tout le fichier psql.java et enlevez le symbole de commentaire de la lig
ne 'package'.
bash$ javac psql.java
bash$ java psql jdbc:postgresql:template1 postgres < password>[1] select * from
 pg_tables;
tablename       tableowner      hasindexes      hasrules
pg_type postgres        true    false   false
pg_attribute    postgres        true    false   false
[2]
CTRL+C
bash$
     _________________________________________________________________

   .... Re_Hourra!! Vous venez de faire tourner les interfaces directes
   de Java  la base de donnes PostgreSQL!!

6.7 Test des interfaces ecpg
     _________________________________________________________________

bash$ cd /usr/doc/postgresql-6.5.2/examples/ecpg
bash$ ecpg test1.pgc -I/usr/include/pgsql
bash$ cc test1.c -I/usr/include/pgsql -lecpg -lpq -lcrypt
bash$ createdb mm
bash$ ./a.out
     _________________________________________________________________

   .... Wow!! vous venez de faire tourner le "C"-SQL / base de donnes
   PostgreSQL" intgr!!

6.8 Test des exemples SQL - Types and fonctions dfinis par l'utilisateur
     _________________________________________________________________

bash$ cd /usr/doc/postgresql-6.5.2/examples/sql
Under-development..
     _________________________________________________________________

6.9 Test des interfaces Tcl/Tk

   Il y a un exemple d'interfaces Tcl/Tk dans le programme pgaccess. Lire
   le fichier /usr/bin/pgaccess  l'aide d'un diteur de texte -
     _________________________________________________________________

bash$ view /usr/bin/pgaccess
bash$ export DISPLAY=<hostname of your machine>:0.0
bash$ createdb mydb
bash$ pgaccess mydb
     _________________________________________________________________

6.10 Test des interfaces ODBC

   1. Procurez-vous le pilote win32 pgsql odbc 
   http://www.insightdist.com/psqlodbc/ 2. Voir galement
   /usr/lib/libpsqlodbc.a

6.11 Test des interfaces de la feuille de travail Motif MPSQL

   Procurez-vous les RPMs auprs de http://www.mutinybaysoftware.com

6.12 Vrification

   Pour vrifier le parfait fonctionnement de PostgreSQL, faites tourner
   le paquetage de test de Rgression :- Connectez-vous en tant que root
   -
     _________________________________________________________________

# rpm -i postgresql*.src.rpm
# cd /usr/src/redhat/SPECS
# more postgresql*.spec   (pour savoir quels sont les paquetage RPM que
vous devez installer)
# rpm -bp postgresql*.spec  (.. ce qui va prparer le paquetage)

Le test de rgression a besoin des Makefiles et de quelques fichiers en-tte
comme *fmgr*.h
qui peuvent tre construits par -
# rpm --short-circuit -bc postgresql*.spec ( .. utilisez "short circuit" pour
forcer les choses!)
Interrompre la construction en pressant les touches CTRL+C quand vous voyez
 'make -C common  SUBSYS.o'
 ce moment l, la configuratioin est russie, tous les "makefiles" et tous les
 fichiers en-tte (headers) ont t crs.
Il n'y a rien de plus  faire.
# cd /usr/src/redhat/BUILD
# chown -R postgres postgresql*
# su - postgres
bash$ cd /usr/src/redhat/BUILD/postgresql-6.5.2/src/test/regress
bash$ more README
bash$ make clean; make all runtest
bash$ more regress.out
     _________________________________________________________________

7. PostgreSQL Supporte des Base de Donnes extrmement grandes > 200 Gigas

   Les performances des machines  cpu 32-bit dcroissent rapidement
   quand la taille de la base de donnes dpasse 5 GigaBytes. Vous pouvez
   faire tourner des bases de donnes de 30 gigas avec un cpu 32-bit cpu
   mais cela ne sera pas trs performant. Les machines  CPU 32 bits
   imposent une limitation de 2 GB de mmoire RAM, de 2 GB pour le
   systme de fichier et d'autres limitations dues au systme
   d'exploitation.

   Si vous avez besoin d'utiliser des bases de donnes extrmement
   grandes, il est fortement recommand d'utiliser des machines 64-bit
   telles que : Digital Alpha cpu, Sun Ultra-sparc 64-bit cpu, Silicon
   graphics 64-bit cpu, Intel Merced IA-64 cpu, machines HPUX 64bit ,
   machines IBM 64-bit. Si l'on compile PostgreSQL avec un cpu 64-bit il
   pourra supporter d'normes bases de Donnes et de grosses requtes.
   Les performances de PostgreSQL pour des interrogations sur de grandes
   tables et de grandes bases de donnes sera plus rapide de plusieurs
   ordres de grandeurs que sur des machines  cpu 32-bit . L'avantage des
   machines 64-bit est qu'elles disposent d'un grand espace d'adressage
   mmoire et que le systme d'exploitation peut grer de trs grands
   systmes de fichiers. Cela permet des meilleures performances avec de
   grandes bases de donnes, plus de mmoire centrale (RAM), plus de
   possibilits etc...

8. PostgreSQL est-il fiable?

   Le paquetage de "Test de Rgression" permet de s'assurer de son bon
   fonctionnement. Il est inclus (src/test/regress) dans la distribution
   et permet  l'ordinateur d'effectuer la vrification des oprations
   SQL standard ainsi que des capacits de PostgreSQL. Le paquetage de
   test contient dj des centaines de programmes SQL de test.

   L'avantage de ce test effectu par l'ordinateur vient du fait que
   celui-ci peut effectuer plusieurs millions de test SQL trs
   rapidement. La vitesse de l'ordinateur est un milliard de fois plus
   rapide que celle de l'esprit humain! Il est donc pertinent d'utiliser
   la puissance de calcul de l'ordinateur pour valider un logiciel plutt
   celle de l'esprit humain.

   Si c'est ncessaire, vous pouvez en ajouter beaucoup d'autres. Dans ce
   cas penser  envoyer ces tests au site PostgreSQL primaire si vous
   pensez que cela peut tre utile aux autres. Le paquetage de Test de
   Rgression permet d'asseoir la confiance des utilisateurs en
   PostgreSQL et facilite le dploiement rapide de PostgreSQL sur des
   systmes en production sans inquitude majeure.

   Le paquetage "Test de Rgression" peut tre considr comme un
   document technique _"TRS SOLIDE"_ reconnu mutuellement par les
   dveloppeurs et par les utilisateurs finaux. Les dveloppeurs de
   PostgreSQL utilisent de faon intensive ce paquetage durant la priode
   de dveloppement et galement avant de mettre le logiciel  la
   disposition des utilisateurs pour en assurer la parfaite qualit.

9. Outil GUI frontal pour PostgreSQL (Interface Utilisateur Graphique)

   Le navigateur Web deviendra, dans le futur, l'interface utilisateur
   graphique le (GUI) le plus populaire. La plus grande partie du code
   doit tre crite en utilisant le langage de scripts de serveurs Web
   PHP/Zend (et en le compilant) PHP combin avec un peu de JavaScript du
   ct du client web. Il est recommand de migrer vos applications
   existantes sous Windows 95/NT vers PHP/Zend.

   Les meilleurs outils sont  :
     * PHP et Zend (script et compilateur) PHP
     * X-Designer supporte C++, Java et MFC http://www.ist.co.uk/xd
     * Qt pour Windows95 et Unix  http://www.troll.no et
       ftp://ftp.troll.no
     * Code Crusader se trouve sur le cdrom linux, logiciel libre bas
       sur Code Warrior de MetroWorks
       http://www.kaze.stetson.edu/cdevel/code_crusader/about.html
     * Code Warrior de MetroWorks http://www.metrowerks.com
     * GNU Prof C++ IDE de Cygnus http://www.cygnus.com
     * Borland C++ Builder pour Linux http://www.inprise.com
     * Borland Java JBuilder pour Linux http://www.inprise.com

   Les langages, par ordre de prfrence sont  :
    1. Le langage de script serveur Web PHP avec Javascript pour le
       client.
    2. Le langage de script Perl en utilisant Perl-Qt ou Perl-Tk Perl
       Database Interface
    3. Le langage C++ Omniprsent avec QtEZ, QT, Lesstiff ou Motif.
    4. Java mais les programmes obtenus sont trs lents.

   D'autres outils sont disponibles  : PostgreSQL possde une
   bibliothque d'interface Tcl/Tk dans la distribution nomme 'pgTcl'.
   Il existe un Environnement de Dveloppement Intgr (EDI ou IDE pour
   integrated development environment) pour Tcl/Tk nomm SpecTcl.

     * L'outil Lesstiff Motif
       ftp://ftp.redhat.com/pub/contrib/i386/lesstiff*.rpm
     * Vibe Java/C++ se trouve t
       http://www.LinuxMall.com/products/00487.html
     * JccWarrior ftp://ftp.redhat.com/pub/contrib/i386/jcc*.rpm
     * Tcl/Tk http://www.scriptics.com
     * Une extension oriente objet de Tcl appele INCR se trouve 
       http://www.tcltk.com
     * Le site Visual TCL http://www.neuron.com
     * Le rpm Visual TCL de Redhat 
       ftp://ftp.redhat.com/pub/contrib/i386/visualtcl*.rpm
     * http://sunscript.sun.com/
     * http://sunscript.sun.com/TclTkCore/
     * ftp://ftp.sunlabs.com/pub/tcl/tcl8.0a2.tar.Z
     * FreeBuilder ftp://ftp.redhat.com/pub/contrib/i386/free*.rpm
     * SpecTCL ftp://ftp.redhat.com/pub/contrib/i386/spec*.rpm
     * Kanchenjunga Java RAD Tool pour PostgreSQL
       http://www.man.ac.uk/~whaley/kj/kanch.html
     * L'Applixware Tool http://www.redhat.com
     * XWPE X Windows Programming Environment
       http://www.rpi.edu/~payned/xwpe/
       ftp://ftp.redhat.com/pub/contrib/i386/xwpe*.rpm
     * XWB X Windows Work Bench
       ftp://ftp.redhat.com/pub/contrib/i386/xwb*.rpm
     * NEdit ftp://ftp.redhat.com/pub/contrib/i386/nedit*.rpm

   Vous pouvez galement utiliser Borland C++ Builder, Delphi, Borland
   JBuilder, PowerBuilder sous Windows95 pour connecter PostgreSQL sous
   unix  travers des pilotes ODBC/JDBC.

10. Pilotes d'interface pour PostgreSQL

10.1 ODBC Pilotes pour PostgreSQL

   ODBC signifie 'Open DataBase Connectivity'. C'est une norme rpandue
   pour accder aux informations des bases de donnes de diffrents
   vendeurs. Le fonctionnement des applications crites en utilisant les
   pilotes ODBC est garanti quelle que soient les bases de donnes
   utilises PostgreSQL, Oracle, Sybase, Informix etc..

     * PostODBC est dj inclus dans les distributions. Consultez le site
       web principal http://www.postgresql.org. Il est inclus dans ce
       CDROM PostgreSQL.
     * http://www.openlinksw.com Open Link Software Corporation distribue
       des ODBC pour PostgreSQL et d'autres bases de donnes. Open Link
       dispose aussi d'ODBC gratuits (quantit limite) vrifier auprs
       d'eux.
     * Insight ODBC pour PostgreSQL http://www.insightdist.com/psqlodbc
       C'est le site officiel PostODBC.

   Il existe aussi un projet appel FreeODBC Pack Package . Il n'y a pas
   de version PostgreSQL, peut-tre pouvez vous y participer.
     * http://www.ids.net/~bjepson/freeODBC/ c'est une version gratuite
       d'ODBC.

10.2 Pilotes UDBC pour PostgreSQL

   UDBC est une version statique de pilote de gestionnaire et de DLL
   d'ODBC indpendant, pour intgrer le support de la connectivit base
   de donnes directement au niveau des applications.
     * http://www.openlinksw.com Open Link Software Corporation vends
       UDBC pour PostgreSQL et autres SGBD. Open Link dispose aussi
       d'UDBC gratuits (quantit limite) vrifier auprs d'eux.

10.3 Pilotes JDBC pour PostgreSQL

   JDBC signifie 'Java DataBase Connectivity'. Java est un langage de
   dveloppement indpendant de la plate-forme d'utilisation dvelopp
   par Sun Microsystems. Les programmeurs Java sont encourags  crire
   leurs applications en utilisant JDBC pour faciliter la portabilit
   entre diffrentes plates-formes telles que PostgreSQL, Oracle,
   informix, etc. Si vous crivez des applications Java applications vous
   pouvez obtenir les pilotes JDBC pour PostgreSQL  partir des sites
   suivants :

   Le pilote JDBC est inclus dans la distribution PostgreSQL.

     * http://www.demon.co.uk/finder/postgres/index.html Sun's Java
       connectivity to PostgreSQL
     * ftp://ftp.ai.mit.edu/people/rst/rst-jdbc.tar.gz
     * http://www.openlinksw.com Open Link Software Corporation vends
       JDBC pour PostgreSQL et autres SGBD. Open Link dispose aussi
       d'JDBC gratuits (quantit limite) vrifier auprs d'eux.
     * Site JDBC UK http://www.retep.org.uk/postgres
     * Site JDBC FAQ http://eagle.eku.edu/tools/jdbc/faq.html

   Le site JDBC, le guide et les FAQ sont situs  -
     * JDBC HOME http://splash.javasoft.com/jdbc
     * JDBC guide
       http://www.javasoft.com/products/jdk/1.1/docs/guide/jdbc
     * JDBC FAQ http://javanese.yoyoweb.com/JDBC/FAQ.txt

10.4 Java pour PostgreSQL

   Ces classes pour PostgreSQL seront trs utiles au programmeur JAVA.
     * ftp://ftp.redhat.com/pub/contrib/i386 et regardez
       postgresql-jdbc-*.rpm
     * http://www.blackdown.org

11. Pilote d'interface de SGBD Perl (Database Interface DBI) pour PostgreSQL

11.1 interface Perl 5 pour PostgreSQL

   PERL est l'acronyme de 'Practical Extraction and Report Language'.
   Perl est disponible pour tous les systmes d'exploitation et toutes
   les plates-formes matrielles au monde. Vous pouvez utiliser Perl sous
   Windows95/NT, Apple Macintosh iMac, toutes les varits d'Unix
   (Solaris, HPUX, AIX, Linux, Irix, SCO etc..), ordinateur central MVS,
   ordinateur de bureau OS/2, OS/400, Amdahl UTS et beaucoup d'autres.
   Perl tourne _MME_ sur de nombreux matriels et systmes
   d'exploitations peu courants/gnralement inconnus!! Aussi, ne soyez
   pas surpris si vous voyez perl tourner sur un systme d'exploitation
   trs rarement utilis.

   Cette interface est incluse dans la distribution de PostgreSQL. On la
   trouve dans le rpertoire src/pgsql_perl5.
     * Contact pour Pgsql_perl5 par email : E.Mergl@bawue.de
     * On la trouve aussi dans -
       ftp://ftp.kciLink.com/pub/PostgresPerl-1.3.tar.gz
     * Page d'accueil Perl : http://www.perl.com/perl/index.html
     * Tutoriel Perl, pour un titre de tutoriel, consultez :
       http://reference.perl.com/
     * La FAQ Perl est  :
       http://www.yahoo.com/Computers\_and\_Internet/Programming\_Languag
       es/Perl/
     * Perl GUI Interfaces Utilisateurs Perl-Qt rpm :
       ftp://ftp.redhat.com/pub/contrib/i386 et cherchez
       PerlQt-1.06-1.i386.rpm
     * Perl GUI Interfaces Utilisateurs Perl-Qt :
       http://www.accessone.com/~jql/perlqt.html
     * Perl GUI Interfaces Utilisateurs Perl-XForms :
       ftp://ftp.redhat.com/pub/contrib/i386 et cherchez
       Xforms4Perl-0.8.4-1.i386.rpm
     * Perl GUI Interfaces Utilisateurs Perl-Tk :
       ftp://ftp.redhat.com/pub/contrib/i386
     * Perl GUI kits : http://reference.perl.com/query.cgi?ui
     * Interfaces de Base de Donnes Perl :
       http://reference.perl.com/query.cgi?database
     * Traducteur de Perl en "C" :
       http://www.perl.com/CPAN-local/modules/by-module/B/ et cherchez
       Compiler-a3.tar.gz
     * Traducteur de Bourne shell en Perl :
       http://www.perl.com/CPAN/authors/id/MERLYN/sh2perl-0.02.tar.gz
     * awk en perl "a2p" et sed en perl "s2p" sont inclus dans la
       distribution PERl.
     * Consultez galement le forum PERL  comp.lang.perl.*

11.2 DBI Interface de Base de Donnes Perl

  Qu'est-ce que DBI ?

   L'interface de SGBD Perl (Perl Database Interface - DBI) est une
   interface logicielle d'accs  un SGBD (Application Programming
   Interface - API) pour le langage PERL. Les spcifications de l'API DBI
   perl dfinissent un ensemble de fonctions, de variables et de
   conventions d'accs  un SGBD cohrent et indpendant du SGBD utilis.
   Les informations concernant cette section DBI ont t prises dans la
   "DBI FAQ" dont l'auteur est Alligator Descartes et sont reproduites
   ici avec sa permission.
     * Alligator Descartes Hermetica peut tre contact 
       descarte@hermetica.com

  Pilote DBI pour PostgreSQL DBD-Pg-0.89

   Vous pouvez obtenir DBD-Pg-0.89.tar.gz de l'un des sites indiqus
   ci-dessous :
     * DBD-Pg-0.89 : http://www.perl.com/CPAN/modules/by-module/DBD/
     * Comprehensive Perl Archive Network CPAN http://www.perl.com/CPAN
     * Liste des pilotes DBI et pages sur les modules DBI
       http://www.hermetica.com/technologia/perl/DBI
     * L'information sur DBI se trouve  http://www.fugue.com/dbi/
     * Site ftp primaire ftp://ftp.demon.co.uk/pub/perl/db
     * Liens divers sur DBI http://www-ccs.cs.umass.edu/db.html
     * Liens divers sur DBI
       http://www.odmg.org/odmg93/updates_dbarry.html
     * Liens divers sur DBI http://www.jcc.com/sql_stnd.html
     * Base de Donnes PostgreSQL http://www.postgresql.org

   CONTRAINTES :
     * - Construire, tester et installer Perl 5 (au moins 5.002)
     * - Construire, tester et installer le module DBI (au moins 0.89)
     * - Construire, tester et installer PostgreSQL (au moins 6.2)

  Support technique sur DBI

   Veuillez envoyer vos commentaires et vos comptes-rendus d'erreurs 
     * E.Mergl@bawue.de

   Pensez  inclure la sortie de perl -v, et perl -V, la version de
   PostgreSQL, la version de DBD-Pg, et la version de DBI dans votre
   compte-rendu d'erreur.

  Qu'est-ce que c'est que DBI, DBperl, Oraperl and *perl?

   Pour citer Tim Bunce, l'architecte et l'auteur de DBI :

   ``DBI est une interface logicielle d'accs aux bases de donnes
   (Application Programming Interface -API) pour le langage Perl. Les
   spcifications DBI API dfinissent un ensemble de fonctions, de
   variables et de conventions cohrents d'interfaage  une base de
   donnes indpendant de la base de donnes utilise.''

   En langage simple, l'interface DBI permet aux utilisateurs d'accder
   de manire transparente  de multiples base de donnes. Ainsi, Si vous
   vous connectez  une base de donnes Oracle, Informix, mSQL, Sybase ou
   n'importe quelle autre, vous n'avez pas besoin de connatre les
   mcanismes sous-jacents de la couche 3GL. L'API dfinie par DBI
   fonctionnera sur tous ces types de bases de donnes.

   On obtient un bnfice du mme ordre en ayant la possibilit de se
   connecter  deux bases de donnes de diffrents fournisseurs  l'aide
   du mme script perl, i.e., je veux lire des donnes d'une base de
   donnes Oracle et les insrer dans une Informix  partir du mme
   programme. La couche logicielle DBI permet de le raliser simplement
   et efficacement.

   DBperl est le nom ancien des spcifications de l'interface. Il est
   utilis maintenant pour dsigner les modules perl4 d'interfaage des
   bases de donnes tels que oraperl, isqlperl, ingperl et autres. Ces
   interfaces n'ont pas d'API standard et ne sont gnralement pas
   supports.

   Voici une liste des modules DBperl, de leur quivalent DBI
   correspondants et du support d'information. Notez que les auteurs
   cits ici ne maintiennent gnralement pas le module DBI de la base de
   donnes. Les adresses E-mail n'ont pas t vrifies et ne doivent
   tre utilises que pour les questions concernant les modules perl4
   lists ci-dessous. Les questions sur les pilotes DBI doivent tre
   directement adresses aux listes de diffusion des utilisateurs DBI.

  Nom du module SGBD requis         Auteur          DBI
    ----------- -----------------   ------          ---
    Sybperl     Sybase              Michael Peppler DBD::Sybase
                                    <mpeppler@itf.ch>
    Oraperl     Oracle 6 & 7        Kevin Stock     DBD::Oracle
                                    <dbi-users@fugue.com>
    Ingperl     Ingres              Tim Bunce &     DBD::Ingres
                                    Ted Lemon
                                    <dbi-users@fugue.com>
    Interperl   Interbase           Buzz Moschetti  DBD::Interbase
                                    <buzz@bear.com>
    Uniperl     Unify 5.0           Rick Wargo      None
                                    <rickers@coe.drexel.edu>
    Pgperl      Postgres            Igor Metz       DBD::Pg
                                    <metz@iam.unibe.ch>
    Btreeperl   NDBM                John Conover    SDBM?
                                    <john@johncon.com>
    Ctreeperl   C-Tree              John Conover    None
                                    <john@johncon.com>
    Cisamperl   Informix C-ISAM     Mathias Koerber None
                                    <mathias@unicorn.swi.com.sg>
    Duaperl     X.500 Directory     Eric Douglas    None
                User Agent

   Cependant, certains modules DBI possdent des couches logicielles
   d'mulation. Ainsi DBD::Oracle est livr avec une couche d'mulation
   Oraperl, ce qui permet d'excuter d'anciens scripts oraperl sans
   modification. La couche logicielle d'mulation traduit les appels
   oraperl API en appels DBI et les excute.

   Voici une table des couches d'mulation :

    Module        Couche d'mulation     tat
    ------          ---------------     ------
    DBD::Oracle     Oraperl             Complte
    DBD::Informix   Isqlperl            En cours de  dveloppement
    DBD::Sybase     Sybperl             Fonctionnelle? ( Ncessite une
                                        vrification)
    DBD::mSQL       Msqlperl            En version exprimentale avec
                                        DBD::mSQL-0.61

   L'mulation Msqlperl est un cas particulier. Msqlperl est un pilote
   perl5 pour les bases de donnes mSQL , mais il ne se conforme pas aux
   spcifications DBI. On dsapprouve son utilisation en faveur de
   DBD::mSQL. On peut tl-charger Msqlperl  partir du site CPAN via :
     * http://www.perl.com/cgi-bin/cpan_mod?module=Msqlperl

  Spcifications DBI

   Il existe quelques sources d'information sur DBI. Spcifications DBI
     * http://www.hermetica.com/technologia/perl/DBI/doc/dbispec

   On trouve deux spcifications disponibles  cette adresse: la nouvelle
   spcification Draft (dition provisoire) DBI qui est un document en
   volution rapide  mesure que l'quipe de dveloppement s'approche
   d'une version stable de l'interface, et l'ancienne spcification
   historique DBperl  partir de laquelle l'interface DBI actuelle a
   volu.

   Il faut considrer ce dernier document comme ne prsentant qu'un
   intrt historique et ne pas l'utiliser en tant que manuel de
   programmation ou document de rfrence. Il demeure cependant une
   source d'informations trs utile.

   Documentation POD (Plain Old Documentation) Les PODs sont des morceaux
   de documentation gnralement noys  l'intrieur des programmes perl
   qui documentent le code "sur place". Ce sont des ressources trs
   utiles pour les programmeurs et les utilisateurs des modules. Les PODs
   pour DBI et pour les pilotes deviennent monnaie courante et la
   documentation pour les modules contenant ces PODs peut tre lue avec
   les commandes suivantes.

   La Spcification DBI Les PODs pour la spcification DBI peut tre lue
   avec la commande :

   perldoc DBI

   Oraperl Les utilisateurs de la couche d'mulation fournie avec
   DBD::Oracle, peuvent s'informer sur la manire de programmer en
   utilisant l'interface Oraperl en tapant:

   perldoc Oraperl

   Ce qui permettra d'obtenir une copie  jour de la page de manuel
   originale crite par Kevin Stock pour perl4. L'API oraperl y est
   entirement liste et dcrite.

   DBD::mSQL Les utilisateurs du module DBD::mSQL peuvent lire des
   informations sur quelques fonctions prives et bizarreries de ce
   pilote en tapant :

   perldoc DBD::mSQL

   Foire Aux Questions (FAQ) Ce document, la Foire Aux Questions, est
   aussi disponible en tant que documentation POD! Vous pouvez le lire
   sur votre propre systme en tapant :

   perldoc DBI::FAQ

   Ceci peut tre plus pratique pour ceux qui ne sont pas connects 
   l'Internet ou le sont d'une manire peu pratique.

   Les POD en gnral On peut lire des informations sur la manire
   d'crire des PODs, ainsi que sur la philosophie des PODs en gnral en
   tapant :

   perldoc perlpod

   Les utilisateurs ayant le module Tk install seront peut-tre
   intresss d'apprendre qu'il existe un lecteur de POD bas sur Tk
   nomm tkpod. Il formate les POD de manire pratique et lisible.

   Discussions, Cancans et Observations
     * http://www.hermetica.com/technologia/perl/DBI/tidbits

   Il y a , de temps en temps, une srie de discussions de la part de
   certaines personnes, dans les listes de diffusion sur DBI.

   ``DBI -- L'interface de SGBD en perl5'' C'est un article crit par
   Alligator Descartes et Tim Bunce sur la structure de DBI. Il a t
   publi dans le numro 5 de ``The Perl Journal''. Il est extrmement
   bon. Allez acheter ce magazine. En fait, achetez les tous. Le site WWW
   de ``The Perl Journal'' est :
     * http://www.tpj.com

   ``DBperl'' Cet article, publi dans l'dition de novembre 1996 du
   ``Dr. Dobbs Journal'' traitait de DBperl.

   ``The Perl5 Database Interface'' Cette rfrence est celle d'un livre
    crire par Alligator Descartes publi par O'Reilly et Associs.

   Listes de diffusion Il y a trois listes de diffusion pour DBI gres
   par Ted Lemon. On peut s'inscrire  toutes et rsilier cette
   inscription  travers le World Wide Web  :
     * Listes de diffusion http://www.fugue.com/dbi

   Les listes o les utilisateurs peuvent participer sont:

   _dbi-announce_ Cette liste de diffusion est rserve uniquement aux
   annonces. Si vous n'arrivez pas  utiliser le formulaire sur la page
   WWW indique ci-dessus, inscrivez-vous  cette liste de la manire
   suivante :
     * Email: dbi-announce-request@fugue.com

   avec le mot 'subscribe' dans le corps du message.

   _dbi-dev_ Cette liste de diffusion est  l'usage des dveloppeurs pour
   discuter des ides et des concepts de l'interface DBI, API et des
   mcanismes des pilotes. Seulement utiles pour les dveloppeurs et les
   personnes intresses. Trafic faible. Si vous n'arrivez pas  utiliser
   le formulaire sur la page WWW indique ci-dessus, inscrivez-vous 
   cette liste de la manire suivante :
     * Email: dbi-dev-request@fugue.com

   avec 'subscribe' dans le corps du message.

   _dbi-users_ Cette liste de diffusion est un lieu de discussion
   gnrale utilise pour les rapports d'erreurs, la discussion sur
   diffrents problmes et des demandes de renseignement d'intrt
   gnral. Si vous n'arrivez pas  utiliser le formulaire sur la page
   WWW indique ci-dessus, inscrivez-vous  cette liste de la manire
   suivante :
     * Email: dbi-users-request@fugue.com

   avec 'subscribe' dans le corps du message.

   Archives des Listes de Diffusion
     * Archive des listes de diffusion US
       http://outside.organic.com/mail-archives/dbi-users/
     * Archive des listes de diffusion Europennes
       http://www.rosat.mpe-garching.mpg.de/mailing-lists/PerlDB-Interest

  Problmes de compilation ou "Il choue aux tests"

   Si vous avez un vidage mmoire, essayez le module Devel::CoreStack
   pour gnrer une trace de la pile du vidage mmoire. On peut trouver
   Devel::CoreStack  :
     * http://www.perl.com/cgi-bin/cpan_mod?module=Devel::CoreStack

   Envoyez un courrier lectronique sur la Liste dbi-users contenant la
   trace de la pile, les versions des modules, la version de perl, les
   situations de test, la version du systme d'exploitation et toutes
   autres informations pertinentes. Plus vous fournirez d'informations
   plus vite les dveloppeurs pourront rsoudre les problmes. Si vous ne
   nous envoyez rien, n'attendez rien en retour.

  DBI est-il support sur les plates-formes Windows 95 / NT ?

   Les portages de DBI et de DBD::Oracle pour Win32 ports font maintenant
   partie intgrante de DBI, donc, la rcupration d'une version de DBI
   suprieure  0.81 doit donner satisfaction. Vous pouvez accder aux
   bases de donnes Microsoft Access et SQL-Server  partir de DBI via
   ODBC. Une "couche d'mulation" DBI exprimentale est fournie avec
   DBI-0.79 (et suivants ) pour le module Win32::ODBC. Son nom est
   DBI::W32ODBC. Vous aurez besoin du module Win32::ODBC.
     * Win32 DBI http://www.hermetica.com/technologia/perl/DBI/win32
     * Win32 ODBC http://www.roth.net

  Qu'est-ce que DBM? Et pourquoi dois-je utiliser DBI  sa place?

   A l'origine UNIX tait bienheureux avec sa "Base de Donnes" rustique
   reposant sur des fichiers, nomme systme dbm. Avec dbm vous
   enregistrez les donnes dans des fichiers et les retrouvez rapidement.
   Cependant, il souffre de srieux inconvnients.

   Verrouillage des fichiers

   Les systmes dbm ne permettent par un verrouillage particulirement
   robuste des fichiers, de mme qu'il n'y a pas de possibilit de
   corriger les problmes survenants lors d'critures [ dans la base de
   donnes ] simultanes.

   Structures de Donnes Arbitraires

   Les systmes dbm permettent seulement une simple structure de donnes
   fixe: paires cl-valeur. Cette valeur peut tre un objet complexe, tel
   qu'une structure [ C ], mais la cl doit tre unique. Ce fut une
   grande limitation dans l'utilit des systmes dbm.

   Cependant, les systmes dbm continuent d'offrir des fonctions utiles
   pour les utilisateurs ayant des ensembles de donnes simples et des
   ressources limites, puisqu'ils sont rapides, robustes et extrmement
   bien tests. Les modules Perl pour accder aux systmes dbm font
   maintenant partie intgrante de la distribution Perl via le module
   AnyDBM_File.''

   Pour rsumer, DBM est une solution parfaitement satisfaisante pour les
   bases de donnes essentiellement en lecture seule, ou pour des
   ensembles de donnes simples et rduits. Toutefois, pour des ensembles
   de donnes plus importants, sans mentionner un verrouillage des
   transactions robuste, on recommandera aux utilisateurs de prfrer
   DBI.

  Est-ce que < insrez une fonctionnalit ici > est support par DBI?

   Si l'on suppose que la fonctionnalit en question n'est pas, en
   standard, spcifique d'un SGBD, alors la rponse sera non.

   DBI reprsente un API qui doit fonctionner avec la plupart des SGBD,
   et n'a pas de fonctionnalit spcifique  un SGDB particulier.

   Cependant, les auteurs d'un pilote peuvent, s'ils le dsirent, ajouter
   une fonctionnalit spcifique  un SGBD  travers les mthodes func
   dfinies dans l'API DBI. Les dveloppeurs de Scripts doivent noter que
   l'utilisation de cette fonctionnalit au travers de ces mthodes func
   a de bonnes chances d'en sacrifier la portabilit entre les diffrents
   SGBD.

  Est-ce que DBI est d'une quelconque utilit pour la programmation CGI?

   En un mot, oui! DBI est extrmement utile pour la programmation CGI!
   En fait, la programmation CGI est une des deux principales utilisation
   de DBI.

   DBI confre aux programmeurs CGI la possibilit d'offrir des base de
   donnes WWW  leurs utilisateurs, ce qui donne  ces utilisateurs la
   possibilit d'utiliser de grandes quantits de donnes bien
   organises. DBI donne aussi la possibilit , si un site reoit un
   trafic trop important pour les performances du serveur, d'amliorer ce
   serveur de base de donnes de faon transparente, sans modifier les
   scripts CGI.

  Comment puis-je obtenir un temps de connexion plus rapide avec DBD::Oracle et
  CGI CGI?

   Le serveur httpd Apache maintient un ensemble de processus fils httpd
   pour servir les requtes clients.

   En utilisant le module mod_perl Apache de Doug MacEachern,
   l'interprteur perl est inclus dans le processus fils httpd. Les
   modules CGI, DBI, et vos autres modules favoris peuvent tre chargs
   au lancement de chaque processus fils. Ces modules ne seront pas
   rechargs  moins d'tre modifis sur disque.

   Pour de plus amples informations sur Apache, consultez le site WWW du
   Projet Apache  :
     * Site WWW du Projet Apache http://www.apache.org
     * Module Mod_perl
       http://www.perl.com/cgi-bin/cpan_mod?module=mod_perl

  Comment puis-je obtenir une connexion persistante avec DBI et CGI?

   En utilisant le module Apache::DBI de Edmund Mergl, les connexions 
   la base de donnes sont enregistres dans une table avec chacun des
   processus httpd fils. Si votre application utilise une base de donnes
   simple utilisateur, cette connexion peut tre lance avec chaque
   processus fils. Actuellement, les connexions  la base de donnes ne
   peuvent pas tre partages entre processus httpd fils. Apache::DBI
   peut tre tl-charg de CPAN via :
     * http://www.perl.com/cgi-bin/cpan_mod?module=Apache::DBI

  "Quand je lance un script perl de la ligne de commande, a marche, mais,
  quand je le lance sous httpd, a choue!" Pourquoi?

   Fondamentalement, il y a une bonne chance que cela provienne du fait
   que l'utilisateur  partir duquel vous avez lanc la ligne de commande
   a un ensemble de variables d'environnement correctement configur, ce
   sont, dans le cas de DBD::Oracle, des variables telles que
   $ORACLE_HOME, $ORACLE_SID ou TWO_TASK. Le processus httpd s'excute
   habituellement sous un utilisateur id ne correspondant pas  un
   utilisateur, ce qui implique qu'il n'y a pas d'environnement
   configur. Tous scripts essayant de s'excuter dans ces circonstances
   choueront. Pour rsoudre ce problme, initialisez l'environnement de
   votre base de donnes dans un bloc BEGIN ( ) en tte de votre script.
   Ceci devrait rsoudre votre problme. De mme, vous devriez regarder
   votre fichier registre d'erreurs pour y trouver des indices, ainsi que
   les guides "Idiot's Guide To Solving Perl / CGI Problems" et "Perl
   CGIProgramming FAQ" pour avoir des informations complmentaires. Il
   est peu probable que ce problme concerne DBI. Lisez ces DEUX
   documents trs soigneusement !
     * Idiot's Guide to Solving Perl / CGI problems
       http://www.perl.com/perl/faq/index.html

  Puis-je faire de l'excution en parallle avec DBI?

   A la date de ce document, non. perl ne permet pas l'excution en
   parallle. Cependant, l'excution en parallle doit faire partie de la
   distribution perl de base  compter de la version 5.005, ce qui
   sous-entend que le support de l'excution en parallle pour DBI
   devrait suivre rapidement. Pour quelques exemples de code OCI pour
   Oracle ayant des instructions SELECT avec excution en parallle, voir
   :
     * http://www.hermetica.com/technologia/oracle/oci/orathreads.tar.gz

  Comment puis-je invoquer des procdures enregistres avec DBI?

   En supposant que vous avez cr une procdure enregistre 
   l'intrieur de la base de donnes cible, e.g., une base de donnes
   Oracle, vous pouvez utiliser $ dbh-> do pour excuter immdiatement
   cette procdure. Par exemple,

   $ dbh-> do( "BEGIN someProcedure END" );

  Comment puis-je rcuprer les valeurs de retour de procdures enregistres
  avec DBI?

   N'oubliez pas d'effectuer un test d'erreur, strict!

    $sth = $dbh->prepare( "BEGIN foo(:1, :2, :3); END;" );
    $sth->bind_param(1, $a);
    $sth->bind_param_inout(2, \$path, 2000);
    $sth->bind_param_inout(3, \$success, 2000);
    $sth->execute;

  Comment puis-je crer ou supprimer une base de donnes avec DBI?

   La cration et la suppression de bases de donnes sont des concepts
   qui sont beaucoup trop abstraits pour tre supports par DBI. Par
   exemple, Oracle ne supporte pas le concept de dtruire une base de
   donnes du tout ! Ainsi, dans Oracle, le serveur de base de donnes
   est essentiellement la base de donnes elle-mme alors que dans mSQL,
   le processus serveur s'excute tranquillement sans aucune base de
   donnes cre. C'est un problme trop htrogne pour s'y attaquer.
   Quelques pilotes, cependant, supportent la cration et la suppression
   de bases de donnes  travers des mthodes func prives. Il vous faut
   regarder dans la documentation des pilotes que vous utilisez pour
   vrifier s'ils supportent de tels mcanismes.

  Comment les valeurs NULL sont-elles prises en compte par DBI?

   Les valeurs NULL dans DBI sont traites comme la valeur undef. Des
   NULLs peuvent tre insrs dans les bases de donnes en tant que NULL,
   par exemple :

    $rv =
        $dbh->do( "INSERT INTO table VALUES( NULL )" );

   mais lors d'une interrogation, les NULLs devront tre tests comme des
   undef. C'est une norme pour tous les pilotes.

  Qu'est-ce que c'est que ces histoires de mthodes func?

   Une mthode func est dfinie  l'intrieur de DBI comme tant un point
   d'entre pour une fonctionnalit d'une base de donnes spcifique, eg,
   la possibilit de crer ou supprimer des bases de donnes.
   L'invocation de ces mthodes spcifiques aux pilotes est simple. Par
   exemple, pour invoquer une mthode createDatabase qui n'a qu'un seul
   argument, on crira :

    $rv = $dbh->func( 'argument', 'createDatabase' );

   Les dveloppeurs de logiciels doivent cependant noter que ces mthodes
   func ne sont pas portables entre SGBD.

  Assistance et formation payante

   L'interface aux SGBD Perl5 est un logiciel LIBRE. IL EST DISTRIBUE
   SANS GARANTIE D'AUCUNE SORTE. Cependant, quelques organisations
   fournissent soit une assistance technique soit des programmes de
   formation pour DBI.

   _PERL CLINIC : _La socit "Perl Clinic" peut offrir des contrats
   d'assistance payants pour Perl, DBI, DBD::Oracle et Oraperl. Cette
   assistance est fournie par la compagnie o travaille Tim Bunce, auteur
   de DBI. Pour de plus amples informations concernant leurs services,
   consultez :
     * http://www.perl.co.uk/tpc

12. Outils de Gestion PostgreSQL

12.1 PGACCESS - Un GUI pour la gestion de PostgreSQL

   PgAccess est une interface Tcl/Tk  PostgreSQL. Il est dj inclus
   dans la distribution de PostgreSQL. Pour une copie plus rcente, vous
   pouvez accder au site web :
     * http://www.flex.ro/pgaccess
     * Si vous avez des commentaires, des suggestions pour des
       amliorations, n'hsitez pas  envoyer un courrier lectronique 
       : teo@flex.ro

   Fonctionnalits de PgAccess

   Fentres de PgAccess : Fentre principale, crateur de tables, vue de
   table (interrogation), crateur visuel d'interrogation .

   Tables

     * - Ouverture de tables pour la visualisation, 200 enregistrements
       maximum ( modifiable dans le menu des prfrences )
     * - re-dimensionnement d'une colonne en tirant la ligne verticale de
       la grille ( plus pratique  raliser  l'intrieur mme de la
       table que dans l'en-tte)
     * - texte encadr dans les cellules - disposition enregistre pour
       chacune des tables)
     * - importation/exportation vers des fichiers externes (SDF,CSV)
     * - possibilit de filtres (filtre de saisie, tel que (prix>3.14)
     * - possibilits de tri (saisie manuelle de(s) champ(s)  trier)
     * - dition en ligne
     * - assistant gnrateur de table amlior
     * - dition de champ amliore

   Requtes
     * - dfinition, dition et enregistrement de "requtes dfinies par
       l'utilisateur"
     * - enregistrement de requtes en tant que vues
     * - excution des requtes
     * - visualisation des rsultats de requtes de type select
     * - suppression et changement de nom de requte
     * - crateur visuel de requtes avec possibilits de
       "glisser/dposer". Pour tous ceux d'entre vous qui ont l'extension
       pour Netscape Navigator de Tcl/Tk installe, vous pouvez le voir
       au travail en cliquant ici

   Squences
     * - dfinition de squences, ainsi que leurs suppression et
       inspection Fonctions
     * - dfinition, inspection et suppression de fonctions en langage
       SQL

   Les futures implmentations disposeront
     * - de la conception des tables (ajout de nouveaux champs,
       changement de nom, etc.)
     * - de la dfinition de fonction
     * - d'un gnrateur de rapport
     * - d'un langage de script de base

   Si vous avez des commentaires, ou des suggestions d'amlioration,
   envoyez un courrier lectronique  :
     * teo@flex.ro

   Informations concernant libgtcl

   Vous aurez galement besoin de la bibliothque d'interface de
   PostgreSQL  Tcl, disponible comme module Tcl/Tk chargeable. Son nom
   est libpgtcl et le source est situ dans le rpertoire PostgreSQL
   /src/interfaces/libpgtcl. Prcisment, vous aurez besoin d'une
   bibliothque libpgtcl qui soit "chargeable"  partir de Tcl/Tk. Ce qui
   est techniquement diffrent d'un fichier objet chargeable PostgreSQL
   ordinaire, car libpgtcl est constitue d'un ensemble de fichiers
   objets. Sous Linux, on l'appelle libpgtcl.so. Vous pouvez tl-charger
    partir d'ici une version dj compile pour les systmes Linux i386.
   La seule chose  faire est de copier libpgtcl.so dans le rpertoire
   bibliothque systme (/usr/lib) et c'est tout. Une solution possible
   est de supprimer dans le source la ligne contenant load libpgtcl.so et
   de charger pgaccess.tcl non pas avec wish, mais avec pgwish (ou
   wishpg) le wish qui a t li avec la bibliothque libpgtcl.

12.2 Outil Windows interactif de gnration de requte pour PostgreSQL

   ("Windows Interactive Query Tool" WISQL ou MPSQL) MPSQL offre une
   interface SQL graphique  PostgresSQL. MPSQL est identique  la
   feuille de programmation SQL d'Oracle et au serveur de requte SQL de
   Microsoft WISQL! Il dispose d'un GUI agrable et d'un historique des
   commandes. Vous pouvez utiliser le coup/coll ainsi que d'autres
   fonctionnalits sympathiques pour accrotre votre productivit.
     * http://www.troubador.com/~keidav/index.html
     * Email : keidav@whidbey.com
     * http://www.ucolick.org/~de/ dans le fichier tcl_syb/wisql.html
     * http://www.troubador.com/~keidav/index.html
     * Email : de@ucolick.org

12.3 Outil interactif de gnration de requte pour PostgreSQL - ISQL

   ISQL est destin aux terminaux fonctionnants en mode ligne de
   commande. C'est inclus dans la distribution et nomm PSQL. Il est trs
   similaire  Sybase ISQL, et  Oracle SQLplus. A l'invite unix tapez la
   commande 'psql' qui en retour vous affichera le caractre d'attente de
   commande: psql> .

Tapez /h pour obtenir de l'aide sur les commandes utilisables.

   C'est trs convivial et d'utilisation facile. C'est aussi trs utile
   pour crire des scripts pour les interprteurs de commandes.

12.4 MPMGR - Un outil de gestion de Base de Donnes pour PostgresSQL

   MPMGR fournira un outil graphique de gestion de Base de Donnes pour
   PostgresSQL. Vous pouvez le trouver 
     * http://www.mutinybaysoftware.com/
     * Email: keidav@mutinybaysoftware.com
     * http://www.troubador.com/~keidav/index.html
     * Email: keidav@whidbey.com
     * http://www.troubador.com/~keidav/index.html
     * http://www.ucolick.org/~de dans le fichier tcl_syb/wisql.html
     * WISQL for PostgreSQL http://www.ucolick.org/~de/Tcl/pictures
     * Email: de@ucolick.org

13. Mise en place de plusieurs machines PostgreSQL avec un seul moniteur

   Vous pouvez empiler plusieurs cpu et les connecter  un unique
   moniteur en utilisant un commutateur KVM (Keyboard, Video, Monitor)
   pour choisir la connexion avec une unit centrale particulire. Ce qui
   conomise de l'espace et vite l'utilisation de plusieurs crans,
   claviers et mulots (conomisant environ de 100  500 US dollars par
   ensemble) et vite aussi pas mal de pagaille.

   En utilisant ce commutateur, vous pouvez empiler plusieurs serveurs
   PostgreSQL (dveloppement, test, production), serveurs Web, serveurs
   ftp, serveurs Intranet, serveur de Courrier, serveurs de Nouvelles,
   sur une tagre. Le botier commutateur peut tre galement utilis
   pour contrler des machines Windows 95/NT ou OS/2.

   Veuillez consulter ces sites :
     * DataComm Warehouse Inc.au 1-800-328-2261. Ils fournissent toutes
       sortes de matriels informatique http://www.warehouse.com Un
       commutateur manuel 4-ports KVM (PS/2) vaut environ $89.99.
       Rfrence de l'article : DDS1354
     * Network Technologies Inc
       http://www.networktechinc.com/servswt.html (120 dollars/PC 8
       ports) qui propose des commutateurs de serveurs 'Server Switches'
       et des commutateurs uniquement vido 'Video only switches'
     * Scene Double Inc, England http://www.scene.demon.co.uk/qswitch.htm
     * Cybex corporation http://www.cybex.com
     * Raritan Inc http://www.raritan.com
     * RealStar Solutions Inc http://www.real-star.com/kvm.htm
     * Belkin Inc http://www.belkin.com
     * DataComm Warehouse Inc Appels 24 heures sur 24, 7 jours sur 7 au
       1-800-328-2261 Ils fournissent toutes sortes de matriels
       d'ordinateur http://www.warehouse.com
     * Better Box Communications Ltd. http://www.betterbox.com/info.html
     * Allez chez votre marchand de matriel le plus proche et demandez
       un commutateur de serveur "Server Switch" galement connu sous le
       nom "KVM Auto Commutateurs".

   Utilisez le moteur de recherche yahoo pour trouver d'autres compagnies
   en utilisant la cl de recherche 'Server Switches' ou "KVM Switches".

   Pour avoir de meilleures performances, on recommande instamment
   d'avoir une machine unix pour chaque processus serveur PostgreSQL.
   Aucun autre programme/traitement ne doit tourner sur cette machine.
   Consultez la page Affaires de votre journal local pour trouver des
   vendeurs de machines intel nues, avec un moniteur monochrome de 13"
   (moniteur particulirement conomique). Les vendeurs locaux vendent
   uniquement du matriel _SANS_ un quelconque Microsoft Windows/DOS (ce
   qui vous fait conomiser environ $ 150). Vous n'avez pas besoin d'un
   moniteur couleur pour un serveur de base de donnes puisque vous
   pouvez en effectuer l'administration  distance  partir d'une station
   de travail PC couleur. Procurez-vous le cdrom Linux  l'adresse
   ci-dessous -
     * Site Web Linux System Labs : http://www.lsl.com/ 7 (U.S. dollars)
     * Site Web Cheap Bytes Inc : http://www.cheapbytes.com/ 7 (U.S.
       dollars)

   Assurez-vous que le matriel que vous achetez est support par le
   Linux Redhat. Vrifiez sur le site ftp de Redhat le matriel
   recommand tels que les coupleurs SCSI, les cartes video avant
   d'acheter. Pour seulement $ 600 vous obtiendrez une machine intel
   puissante avec un Linux Redhat faisant tourner PostgreSQL. Utilisez
   odbc/jdbc/perl/tcl pour vous connecter  PostgreSQL  partir de
   Windows95, OS/2, Unix Motif ou de butineurs web (e.g. Redbaron, Opera,
   Netscape, 20 autres). (Les butineurs web sont en train de rapidement
   devenir le client standard).

   En suivant ce conseil, vous pouvez contrler de nombreux systmes 
   l'aide de seulement un clavier et un moniteur!

   On trouvera ci-dessous un _extrait du catalogue de networktechnic Inc_

   Commandez maintenant, appelez le 800-742-8324 (appel gratuit  partir
   des USA)

   Pour recevoir notre catalogue, veuillez envoyer votre adresse par
   courrier lectronique  : sales@networktechinc.com

   PILOTEZ PLUSIEURS PC's avec un seul clavier, cran et mulot Ces
   commutateurs lectroniques permettent de piloter jusqu' 64 PC's avec
   un unique clavier, cran et mulot. Son microprocesseur interne simule
   la prsence constante du clavier, de l'cran et du mulot pour chacun
   des PC's connects.

   Fonctionnalits et Applications

     * Clavier, face avant ou commande  distance
     * utilisation de connecteurs de mulots 9 broches D Srie ou 6
       broches miniDIN
     * utilisation de connecteurs de clavier 5 broches DIN ou 6 broches
       miniDIN
     * rsolution vido 1600x1200 sans dgradation
     * Utilisation de cbles standards
     * Botier pour bureau ou pour montage en rack

   Spcifications - Clavier

     * Tous les connecteurs dont femelles
     * 5 broches DIN ou 6 broches miniDIN
     * Permettent un Re-dmarrage (boot) matriel ou logiciel de tous les
       PC's  chaque instant

   Contrles - Boutons en face avant

     * Le toucher d'un bouton permet la connexion au PC correspondant
     * L'appui sur un bouton pendant plus de 0.5 secondes entrane le
       fonctionnement dans les modes SCAN, BROADCAST ou COMMAND
     * Les LEDs en face avant indiquent le mode d'opration du clavier
     * L'appui sur CTRL+* entrane le fonctionnement en mode COMMAND
     * Les modes SCAN, BROADCAST ou COMMAND sont disponibles

   Mulot

   * 9 broches D srie
     * o Le commutateur NTI mule le mulot Microsoft srie pour tous les
       PC's
     * o 9 broches D mle pour mulot
     * o 9 broches D femelle pour PC's

   * 6 broches miniDIN
     * o Le commutateur NTI mule le mulot IBM PS/2 pour tous les PC's
     * o Tous les connecteurs sont femelles

   Par cble,  distance
     * Optionnel--doit tre acquis sparment
     * Fonctionnement identique  celui "Boutons en face avant"

   Moniteur (cran) - VGA
     * Bande passante 150 MHz
     * Rsolution 1600X1200 sans dgradation
     * Tous les connecteurs sont des connecteurs femelles

14. Outils et Applications pour PostgreSQL

14.1 PostgreSQL 4GL pour les applications de bases de donnes web - Le systme
de dveloppement AppGEN

   AppGEN peut tre tl-charg de
     * http://www.man.ac.uk/~whaley/ag/appgen.html
     * ftp://ftp.mcc.ac.uk/pub/linux/ALPHA/AppGEN.

   AppGEN est un langage de haut niveau de la quatrime gnration ainsi
   qu'un gnrateur d'application pour produire des applications
   destines au World Wide Web (WWW). Ces applications sont typiquement
   utilises  travers l'internet ou dans le cadre d'un rseau intranet
   d'entreprise. Les applications AppGEN sont implantes en scripts C
   respectants la norme Common Gateway Interface (CGI) utilis par la
   plupart des serveurs Web.

   Pour utiliser AppGEN il vous faudra disposer de :-

   PostgresSQL, systme de gestion de base de donnes relationnel

   Un serveur web compatible CGI tel que HTTPD du NCSA

   D'un compilateur ANSI C tel que GCC

   AppGEN est constitu des excutables Unix (Linux) suivants :-

     * defgen, qui produit une application cadre, de base,  partir de la
       structure logique des donnes. Ces applications sont capables
       d'ajouter, de mettre  jour, de supprimer et de rechercher les
       enregistrements d'une base de donnes tout en conservant
       automatiquement l'intgrit rfrentielle de cette base.
     * appgen, le compilateur AppGEN qui compile le code source appgen en
       code source C CGI excutable et en documents formats HTML prts
       pour leur dploiement sur un serveur web.
     * dbf2sql, un utilitaire de conversion de fichiers .dbf compatibles
       dBase III en scripts SQL excutables. Ce qui permet de migrer les
       donnes stockes dans la plupart des bases de donnes DOS/Windows
       vers un serveur SQL tel que PostgresSQL.
     * De plus, AppGEN comprend un ensemble de documents HTML , de
       fichiers GIF et d'applets Java qui sont utiliss,  l'excution,
       par le systme. Et, naturellement, comme pour tout bon logiciel,
       la totalit du code source est fournie.

   L'auteur, Andrew Whaley, peut tre contact 
     * andrew@arthur.smuht.nwest.nhs.uk

14.2 WWW Web interface pour PostgresSQL - DBENGINE

   dbengine est une interface Web "plug 'n play" pour Postgres95 cre
   par Ingo Ciechowski. Il est  :
     * http://www.cis-computer.com/dbengine/ 

   _A propos de DBENGINE : _dbengine est une interface entre le WWW et
   Postgres95 qui permet un accs simple  n'importe quelle base de
   donnes existante en seulement quelques minutes.

   PHP 3 offre une sorte de langage Perl dans vos documents, mais pas le
   vrai Perl alors que AppGen et wdb-p95 ncessite la cration d'un
   fichier de configuration pour chacune de vos bases de donnes -- c'est
   un peu comme si vous deviez apprendre un nouveau mta-langage avant de
   pouvoir commencer  travailler.

   A la diffrence des autres outils, vous n'avez pas  apprendre un
   langage de programmation particulier ou un langage de script pour
   commencer  utiliser dbengine. De plus, il n'y a pas  crer de
   fichier de configuration pour chaque base de donnes, et vous n'avez
   donc pas besoin de vous familiariser avec sa structure. Cependant - au
   cas o vous voudriez profiter de toutes les possibilits de dbengine,
   ce serait une bonne ide de connatre le langage Perl.

   Le systme tout entier peut tre configur  l'aide de simples
   manipulations d'une base de donnes complmentaire qui contient les
   informations de dtail sur la manire de visualiser vos accs  la
   base de donnes. Vous pouvez mme spcifier des Champs Virtuels qui
   sont calculs en temps rel avant d'tre affichs  l'cran.

   _Licence : _

   dbengine est un logiciel libre selon les mmes conditions que Perl.
   Lisez sa licence si vous n'tes pas sr de ce que vous pouvez ou ne
   pouvez pas faire. La dernire ligne indique que c'est une version plus
   gentille et plus modre que celle de la licence GNU -- une de celle
   qui n'affecte pas votre travail si vous extrayez des parties de
   dbengine ou du paquetage pour l'inclure dans un produit commercial!

15. Module Apache Webserver pour PostgreSQL - NeoSoft NeoWebScript

   Apache est un serveur Web bien connu. On trouvera un module
   d'interface de PostgreSQL pour le serveur Web Apache  -
     * http://www.neosoft.com/neowebscript/

   NeoWebScript est un langage de programmation qui permet d'inclure des
   programmes simples ou compliqus dans des fichiers HTML.

   Quand une page HTML contenant un script NeoWebScript est appele, le
   serveur Web ayant le NeoWebScript activ, excute le(s) script(s)
   inclus, produisant une page Web dont le contenu, personnalis, a t
   cr par le programme.

   NeoWebScript est un moyen rapide, sre, facile  apprendre de crer
   des programmes interactifs puissants directement en code HTML dans des
   pages Web. Avec NeoWebScript, les compteurs, les formulaires de
   courrier lectronique, murs  graffitis, livres d'or et suivi des
   visiteurs sont aiss, mme pour un programmeur dbutant. Regardez
   comment NeoWebScript se dfend bien par rapport  PERL et JavaScript.

   Au cas o vous souhaiteriez installer NeoWebScript sur votre serveur
   web, votre webmestre doit lire notre "FAQ Sysop" pour se lancer. Le
   document "Thorie de fonctionnement" explique comment NeoWebScript
   fonctionne, celui d'Installation est un guide pas  pas des oprations
    effectuer. Le guide de Gestion traite de la manire de configurer et
   de faire fonctionner le serveur, celui de Tests permet de vrifier le
   fonctionnement correct de NeoWebScript, enfin, celui de Maintenance
   traite des problmes de serveur.

   Il n'y a aucuns frais pour l'utilisation de NeoWebScript-2.2 que ce
   soit pour votre ISP, votre intranet, ou votre extranet. Vous pourrez
   voir un licence complte quand vous vous enregistrerez pour
   tl-charger le logiciel, mais il en cote $ 99 si vous dsirez
   l'inclure dans votre propre produit ou l'utiliser dans un serveur
   commercial (eg. SSL).

   NeoWebScript est un module pour le serveur web Apache qui vous permet
   d'inclure , en tant que langage de script, pour vos pages web, le
   langage de programmation Tcl/Tk . Il a t invent par Karl
   Lehenbauer, Directeur Technique chez NeoSoft, et document, renforc
   et tendu par les programmeurs de NeoSoft et par des rdacteurs
   techniques.

   Le serveur Apache est le serveur web le plus populaire au monde,
   totalisant 68 % des sites interrogs.

   Tcl/Tk est un langage de script puissant, libre et multi-plateformes
   dvelopp par le Dr. John Ousterhout. Selon ses propres termes :

   "Tcl/Tk permet aux dveloppeurs de logiciels de raliser un travail
   dix fois plus rapidement qu'avec des outils bass sur C ou C++. C'est
   aussi un grand langage de synthse permettant de faire travailler
   ensemble des applications existantes en les rendant plus graphiques et
   orientes Internet."

   Karl Lehenbauer, Fondateur et Directeur Technique de NeoSoft, a
   particip au dveloppement de Tcl/Tk ds le tout dbut. Avec Mark
   Diehkans, ils sont les auteurs de Tcl tendu (Extended Tcl), connu
   galement sous le nom de TclX ou NeoSoft Tcl, qui constitue un
   ensemble puissant d'extensions au langage. Beaucoup des commandes
   courantes essentielles de Tcl proviennent de Tcl tendu, et furent
   introduites dans le langage par le Dr. Ousterhout.

   NeoSoft Inc., 1770 St. James Place, Suite 500, Houston, TX 77056 USA

15.1 HEITML, extension, ct serveur de HTML et langage 4GL pour PostgreSQL

   Heitml est un autre outil d'interfaage de postgres avec le monde du
   world wide web. Pour plus de dtails contacter

          Helmut Emmelmann H.E.I. Informationssyteme GmbH
          Wimpfenerstrasse 23 Tel. 49-621-795141
          68259 Mannheim Germany Fax. 49-621-795161

     * E-mail Mr.Helmut Emmelmann at emmel@h-e-i.de
     * Heitml site web principal http://www.heitml.com
     * Heitml site web secondaire http://www.h-e-i.deom

   Heitml est  la fois une extension, ct serveur, de HTML et un
   langage de la quatrime gnration (4GL). Avec lui, on peut crire des
   applications web dans un style HTML et en utilisant de nouvelles
   balises de style HTML.

   heitml (prononc "H-ail"-TML) est une extension de HTML et un langage
   de quatrime gnration complet permettant aux Applications utilisant
   le web d'interagir avec des donnes stockes dans des bases de donnes
   SQL, sans mriter l'criture de scripts CGI complexes.

   heitml tend HTML ct serveur, convertissant de manire dynamique les
   fichiers ".hei" au format HTML et ainsi, les rendant compatibles avec
   n'importe quel butineur web. Il englobe la syntaxe simple et familire
   de HTML et apporte un large assortiment de Balises et de Bibliothques
   pr-dveloppes pour prendre en charge les tches qui auparavant
   ncessitaient CGI. De mme que XML, heitml permet l'utilisation de
   balises dfinies par l'utilisateur. Avec heitml les marqueurs dfinis
   par l'utilisateur peuvent tre traduits en HTML et envoys  un
   butineur.

   heitml est destin  la fois aux concepteurs HTML et aux programmeurs
   professionnels. Les concepteurs HTML peuvent utiliser les Balises
   heitml pour fabriquer des pages web dynamiques, des accs aux bases de
   donnes SQL ou crer des applications web compltes. On peut crer des
   Compteurs, des bases de donnes d'inscriptions, des formulaires de
   recherche, des formulaires de courrier lectronique ou des menus
   hirarchiss en utilisant simplement des Balises de style HTML
   pr-dveloppes que l'on trouve dans les nombreuses Bibliothques de
   Composants.

   Pour les programmeurs, heitml inclut un langage de quatrime
   gnration complet en HTML

          (e.g. <if>, <while>, et <let> Balises),

   plus un valuateur d'expression puissant pour les types de donnes
   entiers, rels, boolens chane de caractres et tuple. Les tuples ont
   une rfrence smantique comme dans les langages orients objets
   modernes et sont stocks sur un tas. Les variables heitml y compris
   toutes les structures de donnes complexes stockes sur le tas
   conservent leur valeur de page en page par l'utilisation du Mode
   Session. Il vous est possible de dfinir vos propres balises ou vos
   balises d'environnement et mme de redfinir les balises HTML.

   Avec heitml il devient possible de

   - - - dvelopper des Sites Web de manire structure et modulaire,
   tout en rduisant de faon drastique la surcharge due  la
   maintenance.

   - - - dvelopper des Sites Web intelligents et interactifs, dont le
   contenu s'adapte dynamiquement aux besoins de l'utilisateur.

   - - - de visualiser le contenu de bases de donnes SQL sans autre
   programmation que l'utilisation de notre bibliothque de Balises
   pr-dfinies "dba".

   - - - de dvelopper des applications de bases de donnes complexes et
   de Catalogue d'Achat en utilisant les Variables Session

   heitml tourne sous Linux avec n'importe quel Serveur Web utilisant
   l'interface CGI, et il est particulirement rapide (mis  part la
   surcharge due  CGI) avec le Serveur Web APACHE (version 1.1.1, 1.1.3,
   ou 1.2.4) en utilisant l'API apache. Actuellement MSQL (Version 1 et
   2), PostgreSQL (Version 6), mysql, et les bases de donnes yard sont
   supports. heitml tourne sous Linux, BSDi, Solaris et SunOS, de mme
   que sous Windows NT avec CGI, ISAPI et ODBC et Windows 95.

   heitml (sous linux) est libre pour la recherche, et pour une
   utilisation prive et non commerciale. Les Sites Web commerciaux
   doivent payer une licence. La version totalement oprationnelle de
   heitml est disponible pour une priode d'essai et peut tre
   tl-charg librement. (Notez, cependant, que chaque page Web ".hei"
   que vous dvelopperez affichera un message indiquant qu'il s'agit
   d'une version  usage non commerciale. Aprs enregistrement, vous
   recevrez une cl pour effacer ce message sans avoir  rinstaller le
   programme.)

   Les nouvelles fonctionnalits de la version 1.2 sont

   - - - Bibliothque de Composants pour des Formulaires de Recherche
   dans un Base de Donnes, menus hirarchiss d'ouverture et de
   fermeture, formulaires de courrier lectronique

   - - - Le Mode Session a t re-conu et amlior pour conserver toutes
   les variables (y compris le tas tout entier) au travers des
   diffrentes pages. Cela signifie que les donnes, de n'importe quelle
   taille sont conserves  l'intrieur d'une session. Ceci offre
   l'opportunit d'un champ plus large pour crer de nouvelles
   applications, e.g. stockage complet des rsultats d'une interrogation
   dans la mmoire de la session.

   - - - Les instructions d'installation, la documentation et les
   bibliothques d'exemples ont t augmentes de manire significative,
   un cours d'auto-formation a t ajout

   - - - Des balises pour excuter des commandes shell et pour envoyer
   des courriers lectronique ont t ajoutes

   - - - Le support du formatage d'impression et de la mise au point.
   heitml affiche votre code source en couleurs dans votre butineur et
   signale les erreurs de faon intuitive. En cas d'erreur  l'excution,
   toutes les structures de donnes internes sont affiches dans le
   butineur en indiquant et prservant leurs positions dans le code
   source original.

   - - - Diverses nouvelles variables serveur et fonctions intgres ont
   t ajoutes

   - - - En mode production, heitml collecte maintenant des informations
   compltes sur les erreurs survenues lors de l'accs, par des
   utilisateurs,  votre site.

   Voici ce que dit la page d'accueil de heitml -

   heitml (prononcer "H-ail"-TML) tend et augmente de faon
   significative les fonctionnalits de HTML grce aux balises
   dfinissables et aux possibilits compltes de programmation. Ce qui
   permet de crer simplement des applications au contenu dynamique et
   orientes bases de donnes dans le monde HTML, sans CGI et sans
   scripts externes ou langages de programmation. Cela signifie que vous,
   en tant qu'auteur HTML, vous pouvez inclure des applications dans vos
   pages web, simplement, en utilisant quelques nouvelles balises sans
   CGI et sans programmation. D'un autre ct, comme utilisateur avanc
   ou comme programmeur vous pouvez crer et programmer de puissantes
   bibliothques de balises. Cette approche rend heitml souhaitable  la
   fois pour les utilisateurs nouveaux de HTML et pour les programmeurs
   professionnels. heitml tourne sur le serveur web et gnre
   dynamiquement du HTML, aussi heitml est compatible avec les normes
   internet et avec n'importe quel butineur web. Il permet un accs total
   aux bases de donnes tout en vitant  l'utilisateur toute la
   complexit inutile de CGI. heitml a t dvelopp selon les plus
   rcents critres en matire de construction de compilateurs et de
   systmes transactionnels.

   Les pages heitml sont dveloppes exactement de la mme faon que les
   pages HTML,  l'aide d'un diteur de texte ou d'un diteur HTML, et
   places comme d'habitude sur le serveur web. Cependant, maintenant,
   les pages peuvent contenir des balises heitml dynamiques et des accs
    des bibliothques de balises. Vous pouvez utiliser ces balises pour
   accder  une base de donnes, pour crer un contenu dynamique, pour
   envoyer des courriers lectronique, et mme pour crer de puissantes
   applications telles que les bases de donnes d'inscriptions ou de
   systmes d'achats.

   Les nouveaux venus  HTML et les programmeurs professionnels seront
   stupfaits de la vitesse et de la facilits avec lesquelles il peuvent
   concevoir des applications passionnantes telle que notre Livre d'Or
   Interactif sans ncessiter la complexit et l'apprentissage difficiles
   des scripts CGI, simplement en utilisant les outils fournis dans notre
   bibliothque dba.

   heitml est accompagn d'un large ventail de bibliothques de balises,
   pour crer des livres d'or, des applications de maintenance de bases
   de donnes, des formulaires puissants de courrier lectronique ou de
   structuration de votre site web  l'aide de menus hirarchiques. Ces
   outils sont prts  tre utiliss, il suffit simplement d'ajouter les
   balises correspondantes  votre site web.

   En tant que programmeur expriment, vous pouvez pleinement utiliser
   l'architecture dynamique persistante de tuple d'heitml : heitml n'est
   pas simplement un langage de script  typage dynamique, avec
   valuateur d'expression, procdures rcursives et capacits de passage
   de paramtres tendues, mais il apporte aussi des possibilits de
   tuples persistants dynamiques pour conserver automatiquement des
   donnes de session de n'importe quelle taille.

15.2 Serveur Web America On-line AOL pour PostgreSQL

   Le serveur web commercial gratuit, AOLserver version 2.3 supporte des
   connexions  la base de donnes PostgreSQL version 6.2.1 et
   ultrieure. Pour des informations complmentaires consultez
     * AOL Web Server http://www.aolserver.com

15.3 Outil Systme de suivi de Problme/Projet pour PostgreSQL

   Se trouve  l'url :
     * http://www.homeport.org/~shevett/pts/

15.4 Conversion de fichiers dbase dbf en fichiers PostgreSQL

   Le programme dbf2msql fonctionne parfaitement avec mSQL et PostgreSQL.
   Vous pouvez le trouver 
     * ftp://ftp.nerosworld.com/pub/SQL/dbf2sql/
     * ftp://ftp.postgresql.org/pub/incoming/dbf2pg-3.0.tar.gz

   Ce programme a t crit par Maarten Boekhold, Faculty of Electrical
   Engineering TU Delft, NL Computer Architecture and Digital Technique
   section
     * M.Boekhold@et.tudelft.nl

   Vous pouvez galement utiliser une mthode python pour lire des
   fichiers dbf et les charger dans une base de donnes postgres.
     * Voir http://www.python.org

16. Outil de Conception/Implmentation pour SGBD Web pour PostgreSQL - EARPW

     * http://www.oswego.edu/Earp
     * ftp://ftp.oswego.edu in the directory 'pub/unix/earp'.

16.1 EARP, c'est quoi ?

   Le "Programme de Rponse Facilement Ajustable" ("Easily Adjustable
   Response Program" - EARP) cr par David Dougherty. EARP est un outil
   de Conception/Implmentation pour Base De Donnes Web, ralis
   au-dessus du systme de gestion de base de donnes PostgresSQL. Ses
   fonctionnalits comprennent:

     * Un systme de conception visuel.
     * Une interface d'envoi de courrier lectronique. (pouvant prendre
       en charge le courrier entrant et sortant)
     * Un Mcanisme de Scurit amlior.
     * Un pilote cgi.

16.2 Implantation

   L'implantation principale de EARP consiste en un binaire CGI qui
   s'excute sous le dmon http pour fournir l'accs au serveur de base
   de donnes. Tous les outils de conception sont intgrs dans le
   pilote, aucune conception ne se fait sur le web. Les outils eux-mmes
   requirent un navigateur graphique, la compatibilit des objets conus
   avec ces outils est indpendante de l'implantation, elle ne dpend
   uniquement que des prfrences de conception individuelles.

16.3 Ce dont vous avez besoin pour faire fonctionner EARP

   EARP est sens fonctionner sur une grande varit de plates-formes
   avec peu de modifications sinon pas du tout. Les plates-formes pour
   lesquelles le fonctionnement est connu sont les suivantes :
     * Solaris 2.5
     * Linux 1.2.13+
     * GNU C++
     * PostgreSQL (Version 1.01 / 1.02 )
     * netsite server
     * NCSA httpd

     * GNU C++
     * PostgreSQL (Version 1.01 / 1.02 )
     * NCSA httpd
     * Apache httpd

   La version actuelle (1.3) de Earp a t conue au-dessus de la version
   de libpq livre avec PostgreSQL v1.01/1.02. Si vous utilisez une
   version plus rcente de Postgres, vous devez vous attendre  ce que le
   programme ncessite quelques modifications pour fonctionner
   correctement. Dans la version de dveloppement (Earp 2.0), la prise en
   charge de libpq est en cours de prise en compte en tant que module.

16.4 Comment fonctionne-t-il?

   Une des fonctionnalits principales de EARP est d'utiliser une
   approche oriente objet pour produire des pages html qui s'interfacent
    la base de donnes. La plupart des pages sont constitues de
   plusieurs objets. Chaque objet est produit par une sorte d'outil et
   reoit un nom, les objets sont alors lis ensembles et appels en
   squence par l'outil de gestion de pages. Les objets sont galement
   rutilisables  l'intrieur de plusieurs pages. Il existe des outils
   de base pour HTML, pour les Requtes, pour la saisie dans des
   formulaires, le formatage variable des requtes et des objets en
   entre, ainsi que pour lier des objets pour en former de nouveaux. On
   trouve galement des outils plus avancs tels que l'outil de courrier
   lectronique et l'outil de cration de requtes en parallle.

   La gestion perfectionne de la scurit est une des autres
   fonctionnalits de EARP. L'accs aux diffrentes zones du systme EARP
   peut tre limit par une grande varit de moyens. Pour faciliter
   cette scurit perfectionne, EARP effectue des contrles  chaque
   connexion au systme, et dtermine  quels "ids" et "groups"
   appartient l'agent qui se connecte. Les accs aux zones sont dfinis
   sparment, et la combinaison des deux permet de dcider si l'accs 
   une certaine zone de Earp est autoris. De plus , tout ce qui est
   requis pour raliser les fonctionnalits de scurit se trouve dans un
   serveur http qui effectue une authentification de l'utilisateur
   minimale (ou meilleure).

16.5 O puis-je le trouver?

   EARP est disponible via un ftp anonyme  :
     * ftp://ftp.oswego.edu in the directory 'pub/unix/earp'.

17. PHP Pr-processeur Hypertexte - Langage de script ct serveur, avec HTML
intgr, pour PostgreSQL

   L'outil d'interfaage WWW se trouve  :
     * http://www.php.net
     * http://www.vex.net/php

   PHP possde galement un compilateur appel Zend qui amliore
   grandement les performances. En premier lieu, pendant le
   dveloppement, les tests et la mise au point, vous crivez votre
   application en utilisant le langage de script PHP. Une fois que le
   projet est prt  tre dploy, vous utilisez le compilateur Zend pour
   compiler le script PHP et crer un excutable qui tournera trs
   rapidement.

   PHP 3 est l'ancien nom des Pages d'accueil professionelles et le
   nouveau nom est Pr-Processeur Hypertexte PHP
     * Des sites miroirs existent dans de nombreux pays  l'adresse
       www.COUNTRYCODE.php.org
     * http://www.fe.de.php.net
     * http://www.sk.php.net
     * http://php.iquest.net/

   Pour les questions envoyer un courrier lectronique  :
     * rasmus@lerdorf.on.ca

   PHP 3 est un langage de script ct serveur, avec langage HTML
   intgr. Il vous permet d'crire des scripts simples directement dans
   vos fichiers .HTML  la manire JavaScript, sauf que,  la diffrence
   de JavaScript, PHP 3 n'est pas dpendant du butineur utilis.
   JavaScript est un langage, ct client, avec HTML intgr alors que
   PHP 3 est un langage ct serveur. PHP 3 est similaire, dans son
   concept, au produit LiveWire Pro pour Netscape. Si vous en avez les
   moyens, vous utilisez le serveur du commerce Netscape et l'un des
   systmes d'exploitation supports, et vous jetterez probablement un
   oeil sur LiveWire Pro. Si vous prfrez un logiciel libre, voluant
   rapidement, qui est disponible avec la totalit de son code source,
   vous apprcierez probablement PHP 3.

17.1 Fonctionnalits principales

   Support de CGI Standard, FastCGI et du module Apache. Comme programme
   CGI standard, PHP 3 peut tre install sur n'importe quelle machine
   Unix sur laquelle tourne n'importe quel serveur web Unix. Avec le
   support de la nouvelle norme FastCGI, PHP 3 peut trouver avantage des
   gains de vitesse apports par ce mcanisme. Comme module Apache, PHP 3
   devient une alternative extrmement puissante et brillante  la
   programmation CGI.

     * Enregistrement des accs Avec les possibilits d'enregistrement
       des accs de PHP 3, les utilisateurs peuvent entretenir leur
       propre compteur d'accs et l'enregistrer. Il n'utilise en aucune
       faon les fichiers de d'enregistrement des connexions du systme
       central, et il permet un suivi des accs en temps rel. Le Script
       du Visualisateur de Connexions fournit un rsum rapide des accs
        un ensemble de pages possdes par un utilisateur individuel. De
       plus, le paquetage peut tre configur pour gnrer un pied de
       page, sur chaque page, qui montre l'information sur les accs.
       Regardez au bas de cette page pour en avoir un exemple.
     * Contrle d'accs Un cran de configuration intgr, bas sur le
       web, permet la configuration du contrle des accs. Il est
       possible de crer des rgles d'accs pour toutes ou quelques unes
       des pages web possdes par une certaine personne qui met diverses
       restrictions sur qui peut voir ces pages et comment elles seront
       vues. Les pages peuvent tre protges par un mot de passe,
       compltement interdites,  connexion dsactive et l'accs bas
       sur le domaine du client, le butineur, l'adresse de courrier
       lectronique ou mme le document auquel on se rfre.
     * Support de Postgres Postgres est un SGBDR (RDBMS) avanc libre.
       PHP 3 supporte les requtes Postgres95 et PostgreSQL SQL incluses
       directement dans les fichiers .html.
     * RFC-1867 Support du tl-chargement de fichier Le tl-chargement
       de fichier est une nouvelle fonctionnalit de Netscape 2.0. Il
       permet aux utilisateurs de tl-charger des fichiers vers le
       serveur web. PHP 3 ralise le dcodage Mime rel pour faire ce
       travail et fournit aussi le cadre additionnel pour faire quelque
       chose d'utile avec le fichier tl-charg une fois que celui-ci a
       t reu.
     * Contrle d'authentification bas sur HTTP PHP 3 peut tre utilis
       pour crer des mcanismes d'authentification personnaliss bass
       sur HTTP pour le serveur web Apache.
     * Variables, Tableaux, Tableaux associatifs PHP 3 supporte des
       variables types, des tableaux et mme des tableaux associatifs 
       la Perl. Ils peuvent tre passs d'une page web  l'autre en
       utilisant les mthodes GET ou POST.
     * Conditions, Boucles Tant que (While) PHP 3 possde un langage de
       script aux fonctionnalits compltes de style C. Vous disposez des
       instructions de tests conditionnels if/then/elseif/else/endif
       ainsi que des boucles while et des instructions switch/case pour
       contrler l'ordre logique et la manire dont les pages html
       doivent tre affiches.
     * Expressions Rgulires tendues Les expressions rgulires sont
       trs utilises pour le filtrage, le remplacement de squences et
       les manipulations gnrales de chanes de caractres. PHP 3
       supporte toutes les oprations communes sur les expressions
       rgulires.
     * Contrle de l'En-tte HTTP brute La possibilit d'envoyer  partir
       de pages web des en-ttes HTTP brutes personnalises en fonction
       d'une condition est essentielle pour crer un site web de haut
       niveau. Un usage frquent est l'envoi d'un emplacement: en-tte
       URL pour Rediriger le client appelant vers une autre URL. Il peut
       aussi tre utilis pour stopper le stockage ou manipuler la
       dernire mise  jour de l'en-tte de pages.
     * Cration d'images KIF  la vole PHP 3 prend en compte la
       bibliothque d'image GD de Thomas Boutell ce qui offre la
       possibilit de gnrer des images GIF  la vole.
     * Prise en charge du mode scurit ("Safe Mode") ISP PHP 3 prend en
       charge un "Mode de Scurit" exceptionnel qui permet d'avoir de
       multiples utilisateurs excutant des scripts PHP en toute scurit
       sur le mme serveur.
     * C'est Libre! Pour finir, et c'est un point essentiel. Le paquetage
       est entirement libre. Il est sous les conditions de la licence
       GPL qui vous permet d'utiliser ce logiciel pour n'importe quel
       objectif, commercial ou autre. Reportez-vous au document de la
       Licence Publique GNU pour des renseignements dtaills.

17.2 Crdits

   * De grandes parties de ce code ont t dveloppes  et pour
   l'universit de Toronto. De grands Mercis  Lee Oattes du Dpartement
   de Dveloppement des Rseaux  l'universit pour ses critiques
   constructives permanentes.

   * Le code de prise en charge de Postgres95 a t crit par Adam
   Sussman
     * asussman@vidya.com

   * d'autres, innombrables, ont particip aux tests et  la mise au
   point du paquetage.

17.3 PHP 3 - Bref Historique

   PHP a commenc sa vie comme simple petite enveloppe cgi crite en
   Perl. Son utilisation en dehors d'un usage priv n'avait jamais t
   envisage. Le nom de ce premier paquetage tait "Personal Home Page
   Tools" (Outils pour Page d'Acceuil Personnelle"), qui devint plus tard
   "Kit de Construction d'une Page d'Acceuil".

   Un outil pour inclure facilement des requtes SQL dans des pages web a
   t crit. C'tait fondamentalement un autre petit programme enveloppe
   CGI qui analysait les requtes SQL et facilitait la cration de
   formulaires et de tables bass sur ces requtes. Cet outil fut appel
   FI "Interprteur de Formulaire" (Form Interpreter).

   La version 2.0 PHP/FI est une rcriture complte de ces deux
   paquetages combins pour former un simple programme. il a maintenant
   volu au point de devenir un simple langage de programmation intgr
   dans les fichiers HTML. L'acronyme original, PHP, lui est rest. Il
   n'est plus rellement appropri. PHP/FI est aujourd'hui plus utilis
   pour mettre en place des sites web entiers que pour de petites pages
   d'accueil personnelles. Quel que soit son nom, il limine le besoin de
   recourir  de nombreux petits programmes cgi Perl en permettant
   d'insrer de simples scripts directement dans vos fichiers HTML. Ceci
   amliore les performances globales de vos pages web puisque la
   surcharge due au lancement de processus Perl successifs a t
   limine. La gestion de larges sites web a galement t facilite en
   plaant tous les composants d'une page web dans un fichier html
   unique. En incluant le support de diffrentes bases de donnes, il
   devient trivial de dvelopper des pages web mettant en oeuvre des
   bases de donnes. Nombreux sont ceux qui trouvent que cette
   intgration est plus facile  grer que d'essayer de crer des
   fichiers HTML et CGI spars.

   Tout au long de cette documentation, toute rfrence  PHP, FI ou
   PHP/FI traite de la mme chose. La diffrence entre PHP et FI est
   seulement conceptuelle. Les deux sont construits  partir de la mme
   distribution du code source. Maintenant, PHP/FI a t renomm PHP 3.

17.4 Bon, que puis-je faire avec PHP/FI?

   La premire chose que vous allez noter, si vous faites tourner une
   page par l'intermdiaire de PHP/FI, c'est qu'il ajoute un pied de page
   vous informant du nombre d'accs  votre page (si vous incluez le
   support des connexions d'accs dans votre binaire). C'est seulement un
   tout petit exemple de ce que PHP/FI peut faire pour vous. Il joue
   galement le rle trs important d'interprteur de formulaire cgi,
   d'o la partie FI de son nom. Par exemple si vous crez un formulaire
   dans l'une de vos pages web, vous avez besoin de quelque chose pour
   traiter l'information contenue dans ce formulaire. Mme si vous
   dsirez simplement passer l'information  une autre page web, vous
   aurez besoin d'un programme cgi pour le faire. PHP/FI facilite
   grandement le processus de prise en charge des donnes du formulaire
   pour en faire quelque chose.

17.5 Un simple exemple

   Supposons que vous ayez le formulaire :

<FORM ACTION="/cgi-bin/php.cgi/~userid/display.html" METHOD=POST>
<INPUT TYPE="text" name="name">
<INPUT TYPE="text" name="age">
<INPUT TYPE="submit">
<FORM>

   Votre fichier display.html doit contenir quelque chose du genre :

< ?echo "Hi $ name, vous avez $ age ans!<p>" >

   C'est aussi simple que cela! PHP/FI cre automatiquement une variable
   pour chaque champ de saisie de votre formulaire. Vous pouvez alors
   utiliser ces variables dans le fichier ACTION URL.

   L'tape suivante, aprs avoir vu comment utiliser ces variables, est
   de commencer  jouer avec quelques balises de gestion du droulement
   logique de vos pages. Par exemple, si vous voulez afficher diffrents
   messages dpendants de des informations entres par l'utilisateur,
   vous pouvez utiliser la logique si/alors (if/else). Dans notre exemple
   ci-dessus, on peut afficher diffrentes choses dpendant de l'ge
   entr par l'utilisateur en modifiant notre fichier display.html en :

<?
    if($age>50);
        echo "Hi $name, vous tes un fossile!<p>";
    elseif($age>30);
        echo "Hi $name, vous tes trs vieux!<p>";
    else;
        echo "Hi $name.";
    endif;
>

   PHP/FI fournit un langage de script trs puissant qui peut faire
   beaucoup plus que ce qui est expos dans l'exemple ci-dessus. Regardez
   la section sur le langage de Script PHP/FI pour des informations
   complmentaires.

   Vous pouvez galement utiliser PHP/FI pour configurer qui a le droit
   d'accder  vos pages. Ceci est effectu en utilisant l'cran de
   configuration inclus. Par son intermdiaire , vous pourrez, par
   exemple, spcifier que seulement les gens appartenant  un certain
   domaine seront autoriss  voir vos pages, vous pouvez galement crer
   une rgle protgeant certaines pages par un mot de passe. Voir la
   section Contrle d'Accs pour plus de dtails.

   PHP/FI est galement capable de recevoir des fichiers tl-chargs par
   n'importe quel butineur conforme  la norme RFC-1867. Cette
   fonctionnalit permet aux gens de tl-charger galement des fichiers
   de texte ou binaire. Avec le contrle de PHP/FI et les fonctions
   logiques, vous disposez d'un contrle total sur qui est autoris 
   tl-charger un fichier et sur ce que l'on peut faire de ce fichier
   une fois tl-charg. Voir la section Tl-chargement de fichier pour
   de plus amples dtails.

   PHP/FI supporte le paquetage Postgres95. Il supporte les requtes SQL
   incluses dans vos fichiers .HTML. Consultez la section Support
   Postgres95 pour plus d'informations.

   PHP/FI supporte galement le paquetage du SGBD mysql. Il supporte les
   requtes SQL incluses dans vos fichiers .HTML. Consultez la section
   Support mysql pour plus d'informations.

17.6 Redirection CGI

  Notes Apache 1.0.x

   Une bonne manire de faire tourner PHP/FI est d'utiliser un module de
   redirection cgi avec le serveur Apache. Veuillez noter que vous n'avez
   pas  vous soucier des modules de redirection si vous utilisez la
   version module Apache de PHP/FI. Deux de ces modules de redirection
   sont disponibles. L'un est dvelopp par Dave Andersen
     * angio@aros.net

   et est disponible 
     * ftp://ftp.aros.net/pub/util/apache/mod\_cgi\_redirect.c

   et l'autre est inclus avec Apache et est appel mod_actions.c. Ces
   deux modules sont extrmement similaires. Ils diffrent trs
   lgrement dans leur utilisation. Les deux ont t tests et
   fonctionnent avec PHP/FI.

   Regardez dans la documentation Apache la manire d'ajouter un module.
   En gnral vous ajoutez le nom de module dans un fichier appel
   Configuration. La ligne  ajouter si vous voulez utiliser le module
   mod_actions est :

     Module action_module mod_actions.o

   Si vous envisagez d'utiliser le module mod_cgi_redirect.c ajoutez
   cette ligne :

     Module cgi_redirect_module mod_cgi_redirect.o

   Puis compilez votre httpd et installez-le. Pour configurer la
   redirection cgi il vous faudra soit crer un nouveau type mime dans
   votre fichier mime.types soit utiliser la commande AddType dans votre
   fichier srm.conf pour ajouter le type mime. Le type mime  ajouter
   doit tre quelque chose comme :

     application/x-httpd-php phtml

   Si vous vous apprtez  utiliser le module mod_actions.c il vous
   faudra ajouter la ligne suivante dans votre fichier srm.conf:

     Action application/x-httpd-php /cgi-bin/php.cgi

   Si vous vous apprtez  utiliser mod_cgi_redirect.c vous devrez
   ajouter cette ligne  srm.conf :

     CgiRedirect application/x-httpd-php /cgi-bin/php.cgi

   N'essayez pas d'utiliser en mme temps mod_actions.c et
   mod_cgi_redirect.c .

   Une fois que vous avez l'un de ces modules de redirection cgi install
   et configur correctement, vous pouvez spcifier que vous voulez qu'un
   fichier soit filtr par php/fi en mettant simplement l'extension
   .phtml au fichier. De plus, si vous ajoutez index.phtml  votre ligne
   de configuration DirectoryIndex dans votre fichier srm.conf alors la
   page de plus haut niveau d'un rpertoire sera automatiquement filtre
   par php si vous appelez votre fichier index index.phtml.

  HTTPD Netscape

   Vous pouvez rediriger automatiquement les requtes pour des fichiers
   ayant une extension donne de faon  ce qu'ils soient pris en compte
   par PHP/FI en utilisant le module de Redirection du Serveur CGI
   Netscape. Ce module est disponible dans le Fichier Archives de la Page
   d'Accueil de PHP/FI. Le fichier LISEZ_MOI (README) dans le paquetage
   explique clairement comment le configurer pour l'utiliser avec PHP/FI.

  HTTPD NCSA

   Actuellement NCSA ne supporte pas les modules, donc, pour effectuer
   une redirection cgi avec ce serveur, il vous faudra modifier le code
   source de votre serveur. Une rustine pour faire cela avec NCSA 1.5 est
   disponible dans le fichier archives de PHP/FI.

17.7 Lancer PHP/FI  partir de la ligne de commande

   Si vous fabriquez la version CGI de PHP/FI, vous pouvez l'utiliser
   simplement  partir de la ligne de commande, en tapant: php.cgi
   nom_de_fichier o nom_de_fichier est le fichier que vous voulez
   filtrer. Vous pouvez galement crer des scripts PHP/FI autonomes en
   faisant ressembler la premire ligne de votre script  quelque chose
   comme :

    #!/usr/local/bin/php.cgi -q

   L'option "-q" supprime l'impression des en-ttes HTTP. Vous pouvez
   vous passer de cette option si vous le dsirez.

18. Interface Python pour PostgreSQL

   Python est un langage de script, interprt et orient objet. Il est
   simple  utiliser (syntaxe lgre, instructions simples et sans
   dtours ). Il possde de nombreuses extensions pour btir des
   interfaces utilisateurs ( GUI ), pour s'interfacer au WWW, etc. Un
   butineur de web intelligent (  la HotJava ), est actuellement en
   cours de dveloppement (novembre 1995), et cela devrait ouvrir de
   nombreuses portes aux programmeurs. Le copyrightde Python est dtenu
   par Stichting S Mathematisch Centrum, Amsterdam, Pays-Bas, et est
   librement distribuable Il supporte le chargement dynamique d'objets,
   de classes, de modules et d'exceptions. L'ajout d'interfaces  de
   nouvelles bibliothques systme,  l'aide de code C est ais, rendant
   Python facile  utiliser en cas de personnalisation. Python est un
   langage de script de trs haut niveau possdant une interface X. Le
   paquetage Python est distribu dans les cdroms Linux, et il comprend
   la plupart des modules Python standards, ainsi que des modules
   d'interfaage  l'ensemble de widgets Tix pour Tk.

   PyGresSQL est un module Python qui s'interface  une base de donnes
   PostgreSQL. Il intgre la bibliothque de requtes de PostgreSQL pour
   permettre l'utilisation aise des possibilits de PostgreSQL  partir
   d'un script Python. PyGreSQL a t crit par D'Arcy J.M. Cain et
   Pascal Andre.
     * Nouveau site de PyGreSQL http://www.druid.net/pygresql/
     * Maintenu par D'Arcy  http://www.druid.net/~darcy/
     * L'ancien site est 
       ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95.README 
     * D'Arcy J.M. Cain darcy@druid.net
     * Pascal Andre andre@chimay.via.ecp.fr
     * Pascal Andre andre@via.ecp.fr

18.1 O le trouver PyGres ?

   Les sites d'accueil des diffrents paquetages sont :

     * Python
       ftp://ftp.python.org:/pub/www.python.org/1.5/python1.5b2.tar.gz
     * PyGreSQL ftp://ftp.druid.net/pub/distrib/PyGreSQL-2.1.tgz
     * Old site
       ftp://ftp.via.ecp.fr/pub/python/contrib/Database/PyGres95-1.0b.tar
       .gz 

   Vous devriez cependant essayer de trouver un site miroir proche de
   votre propre site. Consultez les sources d'information pour trouver
   ces sites. PyGres95 devrait se trouver dans les rpertoires contrib
   des sites Python et PostgresSQL.

18.2 Information et support

   Si vous avez besoin d'informations concernant ces paquetages veuillez
   consulter leurs sites web:

     * Python : http://www.python.org/
     * PostgreSQL :
       http://epoch.cs.berkeley.edu:8000/postgres95/index.html
     * PyGreSQL ftp://ftp.druid.net/pub/distrib/PyGreSQL-2.1.tgz
     * Ancien site PyGreSQL :
       http://www.via.ecp.fr/via/products/pygres.html

   Pour un support :
     * Liste de diffusion de PyGreSQL. Vous pouvez vous abonner en
       envoyant un courrier lectronique  majordomo@vex.net en mettant
       la ligne "subscribe pygresql name@domain" dans le corps du message
       et en remplaant "name@domain" par votre propre adresse
       lectronique.
     * Forum de discussion pour Python : newsgroup comp.lang.python
     * PyGreSQL : contacter Andre  andre@via.ecp.fr pour les
       comptes-rendus d'erreurs, ides, remarques

19. Passerelle entre PostgreSQL et WWW - WDB-P95

   WDB-P95 - Une interface Web interface aux bases de donnes PostgresSQL
   a t cre par J. Douglas Dunlop. C'est  :
     * La nouvelle WDB de J Rowe se trouve 
       http://www.lava.net/beowulf/programming/wdb
     * La nouvelle version de WWW-WDB est 
       http://www.eol.ists.ca/~dunlop/wdb-p95/
     * Pour les questions ou pour s'abonner  une liste de diffusion
       contacter : dunlop@eol.ists.ca

   C'est une version modifie de wdb-1.3a2 qui fournit une passerelle WWW
    PostgresSQL. Cette version ncessite galement un Butineur capable
   de prendre en compte les Tables HTML pour avoir une sortie tabule.
   Ceci n'est pas requis pour le wdb original et on peut facilement y
   revenir.

   Vous pouvez essayer ma Bande CASI et ma Requte d'Image. Vous pouvez
   jeter un coup d'oeil au Fichier de Dfinition de Formulaire (FDF) qui
   est utilis pour crer la Bande CASI et galement la Requte d'Image,
   qui comprends une jointure (JOIN) de 2 tables.

   Cette version contient tous les fichiers ncessaires pour installer et
   faire tourner WDB-P95 en tant qu'interface  vos bases de donnes
   PostgresSQL. Le portage de ce systme pour une autre base de donnes
   devrait tre relativement facile -  condition qu'elle supporte le SQL
   standard et possde une interface Perl.

19.1 Le serveur PostgresSQL, pgperl, et httpd doivent-ils rsider sur le mme
hte?

   Non - Le serveur PostgresSQL n'a pas  tre sur le mme hte. Comme
   WDB-P95 est appel par le dmon http, ils doivent rsider sur le mme
   hte. - Et comme WDB-P95 a t crit pour utiliser Pg.pm - pgperl doit
   tre sur le mme hte galement. Pgperl a t crit en utilisant la
   bibliothque libpq, donc, il sera capable d'accder  n'importe quel
   serveur Postgres95 n'importe o sur le rseau, juste comme n'importe
   quel autre client PostgresSQL. Comme illustr ci-dessous

   {WWW Client (Netscape)} => {HTTP Server (NCSA's http) + WDB-P95 +
   pgperl + libpq}=> {PostgresSQL server}

   Les parenthses () reprsentent les machines.

   Chaque machine peut tre d'un type diffrent : NT, SUN, HP, ... mais
   il faut que vous ayez la bibliothque d'interface libpq pour le type
   de machine sur lequel vous envisagez d'utiliser WDB-P95, puisqu'il
   vous faut compiler pgperl. (Le systme a t conu pour utiliser les
   tables HTML donc un client WWW rcent est meilleur)

20. Interfaces au langage "C", "C++", ESQL/C et Oprateurs sur les bits pour
PostgreSQL

20.1 Interface "C"

   Elle est incluse dans la distribution et s'appelle 'libpq'. Elle est
   similaire aux bibliothques OCI Oracle, DB-lib Sybase, ou CLI
   Informix.

20.2 "C++" interface

   Elle est incluse dans la distribution et est nomme 'libpq++'.

20.3 ESQL/C

   C'est un pr-compilateur C intgr pour PostgreSQL ESQL/C comme Pro*C
   d'Oracle, et ESQL/C d'Informix. ESQL/C pour PostgreSQL est une
   interface de programmation d'application SQL (API) qui permet au
   programmeur C de crer des applications personnalises avec des
   possibilits de gestion de base de donnes. ESQL/C pour PostgreSQL
   vous permet d'utiliser un langage de troisime gnration avec lequel
   vous tes familiaris tout en profitant des avantages d'un Langage de
   Requtes Structur (SQL).

   ESQL/C est compos des lments logiciels suivants:
     * Les bibliothques ESQL/C de fonctions C fournissent les accs au
       serveur de base de donnes.
     * Les fichiers d'en-tte ESQL/C apportent les dfinitions des
       structures de donnes, les constantes et les macros utiles dans un
       programme ESQL/C.
     * Le pr-processeur ESQL/C, qui est un pr-processeur de code
       source, transforme un fichier C contenant des instructions SQL en
       fichier excutable.

   Il se trouve  :
     * ESQL/C pour PostgreSQL est dj inclus dans la distribution.
     * Site principal ftp://ftp.lysator.liu.se/pub/linus
     * Email : linus@epact.se

20.4 Oprateurs sur les bits pour PostgreSQL

   Les oprateurs sur les bits ont t crits par Nicolas Moldavsky
     * nico@overnet.com.ar

   Ce sont des fonctions "C" qui implantent les oprateurs bit-par-bit
   (AND, OR, XOR, bit complement) dans pgsql. Si quelqu'un dsire les
   utiliser, il peut les rcuprer par ftp anonyme de

     * ftp://ftp.overnet.com.ar/pub/utils/linux/bitpgsql.tgz

   De plus, il y a un "Makefile" pour Linux.

21. Les Codes Kanji Japonais pour PostgreSQL

   Sont trs utiles pour les Japonais. On les trouvera au site suivant :
     * ftp://ftp.sra.co.jp/pub/cmd/postgres/

22. Portage de PostgreSQL pour Windows 95/Windows NT

   Un portage pour Windows 95/Windows NT est en cours de ralisation. Ce
   portage de fait en utilisant gcc, gmake pour Win NT/95. Le programme
   gnu-win32 est utilis pour compiler le code source sous win32. GNU gcc
   est disponible pour win32. Consultez ce site -
     * http://www.cygnus.com/misc/gnu-win32

   Rcuprez-y le fichier cdk.exe (fichier auto-extractible pour
   gnu-win32)

   Le portage peut galement tre ralis en utilisant l'outil "Emulateur
   Unix sous NT" (Unix-Emulator on NT) suivant de
     * http://www.softway.com

23. Mailing Lists

23.1 Obtenir un compte e-mail Gratuit

   Regardez les offres gratuites - obtenez des comptes e-mail gratuit
   chez
     * Yahoo http://www.yahoo.com cliquer sur e-mail
     * Lycos http://www.lycos.com cliquer sur nouveaux comptes e-mail
     * hotmail http://www.hotmail.com cliquer sur nouveaux comptes e-mail

   Inscrivez vous  la liste de diffusion PostgreSQL et Yahoo dispose de
   la fonctionnalit complmentaire de cration d'un classeur spar pour
   les courriers lectroniques PostgreSQL e-mails, ainsi votre e-mail
   habituel ne sera pas pollu. Slectionnez le menu Email- > Options- >
   Filters et prenez un classeur spar pour e-mail. Avec ce compte
   e-mail vous pouvez accder au courrier de n'importe o dans le monde 
   partir du moment o vous avez accs  une page web.

   Si vous disposez d'un autre e-mail, vous pouvez utiliser les "Filtres
   de Courrier" pour recevoir automatiquement les courriers PostgreSQL
   dans un dossier spar. De cette faon, vous viterez de voir votre
   courrier pollu.

23.2 Liste de Diffusion Anglaise

   Regardez les Titres des Listes de Diffusion sur la page web principale
    :
     * http://www.postgresql.org/
     * Envoyez vos questions par courrier lectronique :
       pgsql-questions@postgresql.org
     * Dveloppeurs pgsql-hackers@postgresql.org
     * Questions spcifiques  un portage pgsql-ports@postgresql.org
     * Questions concernant la documentation pgsql-docs@postgresql.org

   Vous recevrez une rponse, par courrier lectronique, dans la journe
   qui suit!!

   Vous pouvez galement vous inscrire aux listes de diffusion. Pour vous
   inscrire ou vous radier d'une liste, envoyez un courrier 
     * pgsql-questions-request@postgresql.org
     * pgsql-hackers-request@postgresql.org
     * pgsql-ports-request@postgresql.org
     * pgsql-docs-request@postgresql.org

   Le corps du message doit uniquement contenir la simple ligne

   subscribe

   (ou)

   unsubscribe

23.3 Archive des listes de diffusion

   Il y a aussi des listes de diffusion qui sont archives au format html
    l'endroit suivant -
     * Liste accessible par dates via MHonarc sur le WWW 
       http://www.postgresql.org/mhonarc/pgsql-questions
     * ftp://ftp.postgresql.org dans le rpertoire /pub/majordomo

23.4 Liste de Diffusion Espagnole

   Il y a maintenant une liste "non officielle" pour postgreSQL en
   Espagnol. Consultez galement la section 'Compte gratuit pour
   Organiser vos e-mails PostgreSQL e-mails' ci-dessus. Pour souscrire,
   l'utilisateur doit envoyer un message  :
     * majordomo@tlali.iztacala.unam.mx

   Le corps du message doit contenir la simple ligne :

   inscripcion pgsql-ayuda

24. Livres et Documentations

24.1 Guides utilisateur et Manuels

   On trouve dans la distribution PostgreSQL aux formats postscript, HTML
   et pages de manuel unix les documents suivants. Si vous avez accs 
   l'internet, vous pouvez trouver les documents indiqus ci-dessous 
   http://www.postgresql.org/docs

     * Le 'Guide Utilisateur' pour PostgreSQL,
     * Le 'Guide de Ralisation' dtaillant la constitution interne de
       PostgreSQL.
     * Les manuels "en ligne".
     * Le manuels en ligne au format HTML.
     * galement les manuels au format Postscript pour faire des ditions
       papier.

24.2 Documentation en ligne

     * Liste et description des types de donnes et des oprateurs par
       dfaut

Fait partie des commandes PSQL de la version 6.5.2.

     * Liste des mots-cls SQL supports

Il y a un script dans le rpertoire /tools qui fait cela

     * Liste des instructions supportes -

Utilisez la commande psql \h

     * Concepts de base des bases de donnes relationnelles sous
       PostgreSQL (en implmentation) et des tonnes d'exemples en ligne
       (requtes) -

Consultez les tests de rgression dans src/test. L, vous y trouver les
rpertoires regress/sql et suite/*.sql.

     * Didacticiel pour PostgreSQL.

Les scripts du didacticiel SQL sont dans le rpertoire src/tutorial

       Voir galement "Didacticiel SQL pour les dbutants" dans
       l'appendice B de ce document Appendix B

24.3 Documents de Rfrence: Ouvrages de rfrence utiles :

     * "Understanding the New SQL: A Complete Guide" (Comprendre le
       Nouveau SQL: Un Guide Complet)- par Jim Melton et Alan R.Simon

Morgan Kaufman Publisher. C'est un des meilleurs livres sur SQL. Il
concerne SQL92.

     * "A Guide to THE SQL STANDARD" (Un Guide du STANDARD SQL) - par
       C.J.Date

Addison-Wesley Publishing company. C'est galement un bon livre. Trs
populaire en ce qui concerne SQL.

     * SQL - The Standard Handbook, (Le Manuel Standard) November 1992

Stephen Cannan and Gerard Otten
McGraw-Hill Book Company Europe , Berkshire, SL6 2QL, England

     * SQL Instant Reference, (Rfrence Immdiate SQL) 1993

Martin Gruber, Technical Editor: Joe Celko
SYBEX Inc.  2021 Challenger Drive Alameda, CA 94501

     * C.J.Date, "An introduction to Database Systems" (Une introduction
       aux Systmes de Bases de Donnes) (6th Edition), Addison-Wesley,
       1995, ISBN 0-201-82458-2

Ce livre est la Bible des Systmes de Gestion de Bases de Donnes.
Le livre dtaille la normalisation, SQL, la rcupration, la concurrence,
la scurit, l'intgrit, les extensions au modle relationnel original,
des sujets actuels tels que  les systmes client/serveur et le(s) modle(s)
Orient(s) Objet. De nombreuses rfrences sont donnes pour des lectures
complmentaires. Recommand pour la plupart des utilisateurs.

     * Stefan Stanczyk, "Theory and Practice of Relational Databases",
       (Thorie et pratique des bases de Donnes Relationnelles) UCL
       Press Ltd, 1990, ISBN 1-857-28232-9

Ce livre dtaille la thorie des bases de donnes relationnelles, l'algbre
relationnelle, le calcul et la normalisation. Mais il ne couvre pas les sujets
du mode rel et les exemples sont un peu simplistes. Recommand pour la plupart

des utilisateurs.

     * "The Practical SQL Handbook" (Le Manuel Pratique de SQL) Third
       Edition, Addison Wesley Developers Press ISBN 0-201-44787-8

Recommand pour la plupart des utilisateurs.

     * Michael Stonebraker, "Readings in Database Systems" (lectures sur
       les Systmes de Bases de Donnes), Morgan Kaufmann, 1988, ISBN
       0-934613-65-6

Ce livre est un recueil de papiers, sur les bases de donnes, qui ont t
publis sur plusieurs annes. Il n'est pas pour l'utilisateur occasionnel
mais, c'est rellement une rfrence pour les tudiants en classes suprieures
(troisime cycle) ou pour les dveloppeurs de systmes de bases de donnes.

     * C.J.Date, "Relational Database - Selected Readings" (Bases de
       Donnes Relationnelles - Morceaux choisis), Addison-Wesley, 1986,
       ISBN 0-201-14196-5

Ce livre est un recueil de papiers, sur les bases de donnes, qui ont t
publis sur plusieurs annes. Il n'est pas pour l'utilisateur occasionnel
mais c'est rellement une rfrence pour les tudiants en classes
suprieures (troisime cycle) ou pour les dveloppeurs de systmes de
bases de donnes.

     * Nick Ryan and Dan Smith, "Database Systems Engineering",
       (Ingnierie de Systmes de Bases de Donnes), International
       Thomson Computer Press, 1995, ISBN 1-85032-115-9

Ce livre traite des dtails des mthodes d'accs, et des technique de stockage.

     * Bipin C. Desai, "An introduction to Database Systems", (Une
       introduction aux systmes de bases de donnes) West Publishing
       Co., 1990, ISBN 0-314-66771-7

Il n'est pas pour l'utilisateur occasionnel mais c'est rellement une
rfrence pour les tudiants en classes suprieures (troisime cycle)
ou pour les dveloppeurs de systmes de bases de donnes.

     * Joe Celko "INSTANT SQL Programming" (Programmation SQL IMMEDIATE)

Wrox Press Ltd.
Unit 16, 20 James Road, Tyseley
Birmingham, B11 2BA, England
1995

     * Michael Gorman "Database Management Systems: Understanding and
       Applying Database" (Systmes de Gestion de Bases de Donnes :
       comprendre et appliquer les bases de donnes)

Technology
QED and John Wiley
1991

     * Michael Gorman "Enterprise Database for a Client/Server
       Environment" (Base de Donnes d'Entreprise pour un Environnement
       Client/Serveur) QED and John Wiley

Prsente les exigences de construction d'applications de base de donnes
client/server par l'intermdiaire de mta-modles d'entrept et l'utilisation
de la norme SQL ANSI 1993

   Des centaines d'autres titres concernant SQL sont disponibles!
   Vrifiez-le dans une librairie.

24.4 Documents de Spcifications ANSI/ISO SQL - SQL 1992, SQL 1998

   Les documents de Spcifications ANSI/ISO SQL sont situs  l'endroit
   indiqu ci-dessous.
     * http://www.naiua.org/std-orgs.html
     * http://www.ansi.org/docs et cliquez sur le fichier cat_c.html puis
       rechercher "Database SQL"
     * Standard SQL92 http://www.jcc.com et cliquez sur le fichier
       sql_stnd.html
     * Spcifications ANSI/ISO SQL
       http://www.contrib.andrew.cmu.edu/~shadow/sql.html Vous trouverez
       la Rfrence SQL ici.

24.5 Syntaxe de l'ANSI/ISO SQL 1992

   Voir l'Appendice A de ce document Appendix A

24.6 Syntaxe de l'ANSI/ISO SQL 1998

   Les spcifications de SQL 1998 (SQL 3) sont encore en cours de
   dveloppement. Voir le paragraphe 'Electronic Access to the SQL3
   Working Draft' de ce document document  SQL 1998

24.7 Didacticiel SQL pour les dbutants

   Voir l'Appendice B de ce document Appendix B

24.8 Extension Temporelle  SQL92

     * Document pour l'Extension Temporelle  SQL-92
       ftp://FTP.cs.arizona.edu/tsql/tsql2/
     * Spcification SQL-3 Temporelle
       ftp://FTP.cs.arizona.edu/tsql/tsql2/sql3/

   Ce rpertoire contient les spcifications pour une extension
   temporelle au langage SQL-92 standard. Ce nouveau langage est appel
   TSQL2.

   Les spcifications du langage prsentes ici correspondent  la
   version finale du langage.

   La correspondance doit tre adresse au bureau du Comit de Conception
   du Langage TSQL2, Richard T.Snodgrass, Department of Computer Science,
   University of Arizona, Tucson, AZ 85721,
     * rts@cs.arizona.edu

   Les affiliations et les adresses lectroniques des membres du Comit
   de Conception du langage TSQL2 peuvent tre trouves, dans un chapitre
   spar,  la fin des spcifications du langage.

   Le contenu du rpertoire est le suivant :

   spec.dvi,.ps Spcifications du langage TSQL2, publi en Septembre,
   1994

   bookspec.ps Spcifications du langage TSQL2, telles qu'elles
   apparaissent dans le livre sur TSQL2, publi en Septembre, 1995 (voir
   ci-dessous).

   sql3 proposition de modification soumise au comits ANSI et ISO SQL3.

   Un ensemble de commentaires, associs aux spcifications du langage,
   parle des dcisions de conception, fournit des exemples, et traite de
   la faon dont le langage peut tre implant. Ces commentaires sont, 
   l'origine, des propositions faites au Comit de Conception du Langage
   TSQL2. Ils poursuivent actuellement un objectif diffrent: fournir des
   exemples de syntaxe, expliquer les nombreuses dcisions prises durant
   la conception du langage, et comparer TSQL2 aux nombreuses autres
   propositions de langage faites au cours des quinze dernires annes.
   Il faut insister sur le fait que ces commentaires ne font pas partie
   intgrante des spcifications du langage TSQL2 en lui-mme, mais
   plutt qu'elles le compltent et constituent un apport. Le mot de la
   fin est donn par les spcifications de TSQL2 proprement dit.

   Les commentaires, ainsi que les spcifications du langage, plusieurs
   index, et d'autres lments de support ont t publis dans un livre :

   Snodgrass, R.T., diteur, The TSQL2 Temporal Query Language, (Le
   Langage de Requtes Temporel TSQL2) Kluwer Academic Publishers, 1995,
   674+xxiv pages.

   Les commentaires d'valuation sont donns sous forme abrge dans le
   livre; La totalit des commentaires est fournie dans le fichier
   eval.ps situ dans ce rpertoire

   Le fichier tl2tsql2.pl est un programme prolog qui traduit la logique
   temporelle autorise en TSQL2. Ce programme a t crit par Michael
   Boehlen
     * boehlen@iesd.auc.dk

   On peut le contacter pour obtenir un papier qui dcrit cette
   traduction. C'est une version tout  fait ancienne du programme. Les
   nouvelles versions sont disponibles 
     * http://www.cs.auc.dk/general/DBS/tdb/TimeCenter/Software

   (the TimeDB and Tiger systems).

24.9 Partie 0 - Acquisition des Documents ISO/ANSI SQL

   Ce document vous explique comment acqurir (lgalement) une copie de
   la norme SQL-92 et comment acqurir une copie du Brouillon de Travail
   du SQL3 "actuel".

   La norme ANSI est protge par un copyright de l'ANSI, et la norme ISO
   par un copyright de l'ISO.

   Il y a deux (2) normes SQL courantes, une publication ANSI et une
   publication ISO. Les deux normes sont identiques mot-pour-mot except
   pour quelques sujets triviaux tel que le titre du document, les
   en-tte de page, la phrase "International Standard" au lieu de
   "American Standard", et ainsi de suite.

   Achat du Standard SQL-92

   La norme ISO, ISO/IEC 9075:1992, Information Technology - Database
   Languages - SQL, est actuellement (Mars, 1993) disponible et en stock
    l'ANSI :

     American National Standards Institute
     1430 Broadway
     New York, NY 10018 (USA)
     Phone (sales): +1.212.642.4900

   au prix de US$ 230.00. La version ANSI, ANSI X3.135-1992, American
   National Standard for Information Systems - Database Language SQL,
   n'tait pas disponible en stock au moment de la rdaction, mais il
   devrait l'tre entre fin Mars et dbut Mai, 1993). Il devrait coter
   US$ 225.00.

   Si vous achetez l'un ou l'autre document  l'ANSI, il y aura un
   supplment de 7% pour le traitement (soit environ US$ 9.10). Les frais
   d'envoi  l'tranger accrotront sans doute le cot. ANSI exige des
   socits un document de commande crit pour chaque commande; d'un
   autre ct, vous pouvez envoyer un chque tir sur une banque US en
   dollars US, qu'ils encaisseront avant d'expdier votre commande. (Il y
   a une exception : si votre organisation est membre de l'ANSI, alors
   l'ANSI enverra les documents et une facture  votre compagnie.)

   La norme ISO est aussi disponible en dehors des tats-Unis  partir de
   reprsentations nationales locales (entits de standardisation du
   pays) qui sont membres soit de l'ISO (International Organization for
   Standardization) soit de l'IEC (International Electrotechnical
   Commission). Des copies de la liste des reprsentations nationales,
   avec leurs adresses, sont disponibles de l'ANSI ou d'autres entits
   nationales. Ils sont aussi disponibles  l'ISO :

     International Organization for Standardization
     Central Secretariat
     1, rue de Varembi
     CH-1211 Genve 20
     Switzerland

   Si vous prfrez commander la norme d'une faon plus facile et plus
   rapide, il vous faudra payer pour ce privilge. Vous pouvez commander
   le ISO/IEC 9075:1992, Information Technology - Database Languages -
   SQL,  :

     Global Engineering Documents
     2805 McGaw Ave
     Irvine, CA 92714 (USA)
     USA
     Tlphone (accessible de partout): +1.714.261.1455
     Tlphone (uniquement aux USA): (800)854-7179

   pour un prix de US$ 308.00. Je ne sais pas si le port est compris ou
   non, mais je parierais que l'envoi international (au moins) sera en
   supplment. Ils peuvent vous envoyer un document trs rapidement et
   acceptent mme les "plus grandes cartes de crdit". Global n'a pas
   encore la version ANSI pas plus qu'un prix ou qu'une date prvisible
   de disponibilit (bien que je l'attende dans les quelques semaines
   suivant la publication par l' ANSI et  un prix aux alentours de US$
   300.00).

   Achat d'une copie du Document de Travail SQL3

   Vous pouvez acheter une copie du document de travail SQL3 au
   secrtariat de l'ANSI X3, CBEMA (Computer and Business Equipment
   Manufacturers Association). Leur objectif est d'avoir la "plus
   rcente" version du document de travail de SQL3 disponible et de la
   vendre pour environ US$ 60.00  US$ 65.00. Vous pouvez contacter CBEMA
   :

     CBEMA, X3 Secretariat
     Attn: Lynn Barra
     1250 Eye St.
     Suite 200
     Washington, DC 20005 (USA)

   Lynn Barra peut aussi tre contacte par tlphone au +1.202.626.5738
   pour une demande de copie, bien qu'un courrier soit probablement plus
   courtois.

   Accs lectronique au Document de Travail SQL3

   La plus rcente version ( la date de rdaction) du document de
   travail SQL3 ( la fois ANSI et ISO, et de toutes ses parties) est
   disponible par "ftp anonyme" ou par "ftpmail" sur:

     gatekeeper.dec.com

  dans

     /pub/standards/sql/

   Dans ce rpertoire , il y a de nombreux fichiers. Ce sont des fichiers
   PostScript et "texte ordinaire" (pas trs bien formats, mais lisibles
   sur un cran sans logiciel spcifique).

   En gnral, vous pouvez trouver des fichiers avec des noms tels que :

     sql-bindings-mar94.ps
     sql-bindings-mar94.txt
     sql-cli-mar94.ps
     sql-cli-mar94.txt
     sql-foundation-mar94.ps
     sql-foundation-mar94.txt
     sql-framework-mar94.ps
     sql-framework-mar94.txt
     sql-psm-mar94.ps
     sql-psm-mar94.txt

   A mesure que de nouvelles versions des documents sont produites le
   "mar94" changera pour indiquer la nouvelle date de publication (e.g.,
   "aug94" est la date attendue de la prochaine publication suivant
   "mar94").

   De plus, pour les lecteurs ne pouvant pas obtenir une liste de
   rpertoire par FTP, nous avons ajout un fichier ayant pour nom :

     ls

   dans le mme rpertoire. Ce fichier (surprise!) contient une liste du
   rpertoire.

   Rcuprer les Fichiers Directement par Ftp

   Voici un exemple sur la faon d'utiliser FTP. Spcifiquement, il
   montre comment se connecter  gatekeeper.dec.com, aller au rpertoire
   o le document de base est gard et  transfrer ce document sur votre
   machine. Notez que votre machine doit pouvoir accder  l'internet
   pour faire cela. Le nom de connexion est 'ftp' et le mot de passe est
   votre adresse e-mail (on appelle quelquefois cela 'ftp anonyme'). La
   commande 'type binaire' est utilise pour s'assurer qu'aucuns bits ne
   seront supprims du (des) fichier(s) reu(s). La commande 'get'
   rcupre un fichier  la fois. Les commentaires dans le script
   ci-dessous sont placs entre les signes < ... >, < comme ceci > .

  % ftp gatekeeper.dec.com
  Connected to gatekeeper.dec.com.
  220- *** /etc/motd.ftp ***
       Gatekeeper.DEC.COM is an unsupported service of DEC Corporate Research.
       <...il en va ainsi pendant un certain temps...>
  220 gatekeeper.dec.com FTP server (Version 5.83 Sat ... 1992) ready.
  Name (gatekeeper.dec.com:<votre nom de connexion ici>): ftp  <anonyme fonctio
nne galement>
  331 Guest login ok, send ident as password.
  Password: <entrez votre adresse e-mail ici>
  230 Guest login ok, access restrictions apply.
  Remote system type is UNIX.  <ou autre>
  Using binary mode to transfer files.
  ftp> cd pub/standards/sql
  250 CWD command successful.
  ftp> dir
  200 PORT command successful.
  150 Opening ASCII mode data connection for /bin/ls.
  total 9529
  -r--r--r--  1 root     system     357782 Feb 25 10:18 x3h2-93-081.ps
  -r--r--r--  1 root     system     158782 Feb 25 10:19 x3h2-93-081.txt
  -r--r--r--  1 root     system     195202 Feb 25 10:20 x3h2-93-082.ps
  -r--r--r--  1 root     system      90900 Feb 25 10:20 x3h2-93-082.txt
  -r--r--r--  1 root     system    5856284 Feb 25 09:55 x3h2-93-091.ps
  -r--r--r--  1 root     system    3043687 Feb 25 09:57 x3h2-93-091.txt
  226 Transfer complete.
  ftp> type binary
  200 Type set to I.
  ftp> get x3h2-93-082.txt
  200 PORT command successful.
  150 Opening BINARY mode data connection for x3h2-93-082.txt (90900 bytes).
  226 Transfer complete.
  90900 bytes received in 0.53 seconds (166.11 Kbytes/s)
  ftp> quit
  % <le fichier est maintenant dans votre rpertoire sous le nom x3h2-93-082.tx
t>

   Rcupration de Fichiers Sans Faire un ftp Direct

   Digital Equipment Corporation, comme plusieurs autres compagnies,
   fournit un service de ftp par courrier lectronique. La rponse peut
   prendre plusieurs jours, mais cela fournit un service quivalent  ftp
   pour ceux qui n'ont pas un accs direct au ftp par Internet. L'adresse
   du serveur est:

   ftpmail@decwrl.dec.com

   Le script suivant rcuprera la dernire version PostScript du
   document SQL3 :

     reply joe.programmer@imaginary-corp.com
     connect gatekeeper.dec.com anonymous
     binary
     compress

   Le script suivant rcuprera la dernire version PostScript du
   document SQL3 :

     reply joe.programmer@imaginary-corp.com
     connect gatekeeper.dec.com anonymous
     binary
     compress
     uuencode
     chdir /pub/standards/sql
     get x3h2-93-091.ps
     quit

   La premire ligne du script commande au serveur de vous retourner les
   fichiers demands; vous devrez remplacer
   "joe.programmer@imaginary-corp.com" par votre adresse Internet. Le
   fichier x3h2-93-091.ps, dans cet exemple, est retourn sous forme de
   34 messages e-mail spars, "compresss" et "uuencods". Si votre
   environnement ne dispose pas des outils pour reconstruire de tels
   fichiers, alors, il vous faudra rcuprer le fichier sous forme de
   texte pur en utilisant le script suivant:

     reply joe.programmer@imaginary-corp.com
     connect gatekeeper.dec.com anonymous
     chdir /pub/standards/sql
     get x3h2-93-091.ps
     quit

   Mais, attention, le fichier .ps vous sera probablement envoy en plus
   de 70 morceaux!

   Pour rcuprer un fichier particulier, autre que x3h2-93-091.ps,
   remplacez simplement "x3h2-93-091.ps" par le nom du fichier dsir.
   Pour obtenir la liste de tous les fichiers disponibles dans un
   rpertoire, remplacez "get x3h2-93-091.ps" par "dir".

24.10 Partie 1 - Etat Actuel de l'ISO/ANSI SQL

   Ce chapitre constitue une source d'information  propos du processus
   de normalisation de SQL et de son tat actuel.

   tat Actuel

   Le dveloppement pour amliorer SQL afin d'en faire un langage complet
   pour la dfinition et la gestion d'objets persistants et complexes.
   Ceci comprend : les hirarchies de gnralisation et de
   spcialisation, l'hritage multiple, les types de donnes dfinies par
   l'utilisateur, les dclencheurs et les assertions, le support des
   systmes  base de connaissances, les requtes rcursives, et des
   outils complmentaires d'administration de donnes. Cela inclue
   galement la spcification des types de donnes abstraits (ADTs), des
   identificateurs d'objets, des mthodes, de l'hritage, du
   polymorphisme, de l'encapsulation et de tous les autres moyens
   normalement associs  la gestion d'objets.

   A l'automne 1996, plusieurs parties de SQL3 ont t soumises  un vote
   de l'ISO CD. Ce sont SQL/Framework, SQL/Foundation et SQL/Bindings. Ce
   vote choua (comme prvu) avec environ 900 commentaires. Fin Janvier,
   un comit de rdaction traita un grand nombre de solutions aux
   problmes qui furent soit incluses avec les commentaires du vote ou
   soumises en tant que documents spars. Depuis le comit de rdaction
   DBL n'a pas pu traiter tous les commentaires et sa dure a t
   augmente. La fin du comit de rdaction est prvue pour la fin
   Juillet 1997,  Londres.

   A la suite du comit de rdaction de Juillet, on attend qu'un vote
   final du CD soit demand pour ces parties de SQL. Le processus du CD
   Final prendra environ 6 mois et un comit de rdaction du DBL, aprs
   lesquels il y aura un vote IS et un trs rapide vote IS.

   Les procdures ISO ont chang depuis SQL/92, et les comits SQL
   travaillent encore selon les rgles du processus.

   Si tout va bien, ces parties du SQL3 deviendront une norme officielle
   ISO/IEC en fin 1998, mais le programme est trs serr.

   En 1993, les comits de dveloppement ANSI et ISO ont dcid de
   d'clater le dveloppement futur de SQL en une norme multi-parties.
   Ces parties sont :

     * Partie 1: Structure Description non technique de la manire dont
       le document doit tre structur.
     * Partie 2: Base Spcifications de base, incluant toutes les
       nouvelles fonctionnalits ADT.
     * Partie 3: SQL/CLI Interface du niveau appel (Call Level
       Interface).
     * Partie 4: SQL/PSM Spcifications des procdures enregistres
     * Partie 5: SQL/Bindings SQL Dynamique et SQL Embedded SQL liens
       venant de SQL-92.
     * Partie 6: SQL/XA Une spcialisation de l'interface populaire XA
       dveloppe par X/Open
     * Partie 7:SQL/Temporal Ajoute les capacits lies au temps  la
       norme SQL.

   Aux USA, la totalit de SQL3 est en cours de traitement  la fois
   comme projet ("D") national et comme projet ISO. La fin de SQL3 est
   attendue pour courant 1999.

   Le SQL/CLI et le SQL/PSM sont en cours de traitement aussi rapidement
   que possible comme addenda  SQL-92. Aux USA, ils sont traits
   uniquement comme projet International. SQL/CLI a t termin en 1995.
   SQL/PSM devrait tre termin fin 1996.

   En plus du travail sur SQL3, quelques projets additionnels sont
   poursuivis :

     * SQL/MM Un effort en cours pour dfinir une norme multi-media
       utilisant les possibilits de SQL3 ADT.
     * Accs aux donnes  distance (RDA)

   Comits et Processus de Standardisation

   Il y a effectivement de nombreux comits de normalisation de par le
   monde. Il y a un groupe international de normalisation SQL faisant
   partie de l'ISO. Un certain nombre de pays on des comits qui se
   consacrent  SQL. Ces pays (habituellement) envoient des reprsentants
   aux runions ISO/IEC JTC1/SC 21/WG3 DBL. Les pays qui participent
   activement au processus de normalisation ISO SQL sont :

     * Australie
     * Brsil
     * Canada
     * France
     * Allemagne
     * Japon
     * Core
     * Pays-Bas
     * Angleterre
     * tats-Unis

   Validation NIST

   Les implmentations SQL sont valides (aux tats-Unis) par le National
   Institute of Standards and Testing (NIST). Le NIST possde une suite
   de tests de validation pour le niveau de base SQL-92. Les dtails
   exacts des exigences de la validation NIST sont dfinis comme un
   Federal Information Processing Standard (FIPS). Les exigences
   actuelles pour SQL sont dfinies dans le document FIPS 127-2. Les
   versions Postscript et Texte de ce document peuvent tre obtenues au
   NIST. La Liste des Produits Valids  jour peut galement tre obtenue
   au NIST.

   Publications et Articles sur le Standard SQL

   Il y a deux versions de la norme SQL. Les deux sont disponibles 
   l'ANSI:

     * ISO/IEC 9075:1992, "Information Technology --- Database Languages
       --- SQL"
     * ANSI X3.135-1992, "Database Language SQL"

   Les deux versions de la norme SQL sont identiques sauf la page de
   garde et les rfrences aux autres normes. Les deux versions sont
   disponibles au :

     American National Standards Institute
     1430 Broadway
     New York, NY 10018
     USA
     Tlphone (ventes): +1.212.642.4900

   En supplment  la norme SQL-92, il y a maintenant un Technical
   Corrigendum (correction d'erreurs) :

   * Technical Corrigendum 1:1994 to ISO/IEC 9075:1992

   Le TC 1 doit aussi tre disponible  l'ANSI. Il n'y a qu'une version
   du TC 1 -- qui s'applique  la fois aux versions ISO et ANSI de
   SQL-92.

   En supplment  ces normes, plusieurs livres ont t crits sur la
   norme SQL 1992. Ces livrent donnent une description bien plus lisible
   de la norme que celle donne par le norme elle-mme.

   Standards connexes

   Un certain nombre d'autres normes prsentent de l'intrt pour la
   communaut SQL. Cette section contient des pointeurs donnant des
   informations sur ces efforts. Ces pointeurs seront plus nombreux 
   mesure que des informations complmentaires seront disponibles sur le
   web.

     * SQL Environnements (FIPS 193) - (Environnements SQL)
     * Next Generation Repository Systems (X3H4) - (Systmes Dpositaires
       de la Prochaine Gnration) Une version des Nouvelles appelant 
       une participation au "Dveloppement des Standards pour les
       Systmes Dpositaires de la Prochaine Gnration."

24.11 Partie 2 - Fondements ISO/ANSI SQL

   Une partie importante de l'effort pour SQL3 rside dans le document de
   base SQL :

     * Capacits de Base SQL/PSM (venant de SQL/PSM-92)
     * Nouveaux types de donnes
     * Dclencheurs
     * Sous-tables
     * Types de Donnes Abstraits (ADT)
     * Capacits Orientes Objets

   Il y a plusieurs pr-requis pour les capacits orientes objets :

     * Capacit de pouvoir dfinir des oprations complexes
     * Stockage des oprations complexes dans la base de donnes
     * Appels de Procdures Externes  Quelques oprations peuvent ne pas
       exister dans SQL ou peuvent ncessiter des interactions externes

   Ces capacits sont dfinies comme faisant partie de SQL/PSM

   Une grande quantit de travail est en cours de ralisation pour
   affiner le modle objet SQL-3 et l'aligner sur le modle objet propos
   par l'ODMG. Cet effort est dcrit dans les papiers X3H2 et ISO DBL :
   Accommoder SQL3 et ODMG. Une mise  jour rcente sur le Fusionneur
   SQL3/OQL est galement disponible.

   Planification de SQL3

   Le travail sur SQL3 se poursuit normalement, mais la publication de la
   norme finale se situe encore  un horizon de plusieurs annes.

     * Le vote International pour passer du Brouillon de Travail au
       Brouillon du Comit (CD) aura lieu  l'automne 1996.
     * On s'attend  ce que le vote gnre de nombreux commentaires
     * Un second vote sera probablement ncessaire
     * Le vote pour le Brouillon du Standard International devrait avoir
       lieu  la mi-1998
     * Le Standard International doit tre termin  la mi-1999.

   Le programme de la version ANSI sera similaire.

24.12 Partie 3 - Interface d'Appel SQL ISO/ANSI

   SQL/CLI est une interface de programmation d'appel pour les bases de
   donnes SQL. Il est conu pour accder aux bases de donnes  partir
   d'applications fermes. CLI a,  l'origine, t cr par un
   sous-comit du groupe SQL Access (SAG). Les spcifications de SAG/CLI
   ont t publies, en 1992, en tant que spcifications Microsoft Open
   DataBase Connectivity (ODBC) en 1992. En 1993, le SAG a soumis le CLI
   aux comits ANSI et ISO SQL. (Le groupe "SQL Access Group" a
   maintenant t fusionn avec le consortium X/Open.)

   SQL/CLI fournit une norme internationale pour :

     * Un CLI dpendant de l'implmentation pour accder aux bases de
       donnes SQL
     * Des outils Client-serveur pour accder facilement  une base de
       donnes au moyen de Bibliothques de Lien Dynamique
     * Supporter et encourager un riche ensemble d'outils Client-serveur

   Planification de SQL/CLI

   Le processus de normalisation de SQL/CLI se poursuit  une vitesse
   aveuglante.

     * SQL/CLI est un addendum  la norme SQL de 1992 (SQL-92)
     * Achev comme norme ISO en 1995
     * ISO/IEC 9075-3:1995 Information technology -- Database languages
       -- SQL -- Partie 3: Call-Level Interface (SQL/CLI)
     * L'effort actuel porte sur l'ajout des fonctionnalits SQL3 
       SQL/CLI

24.13 Partie 4 - Modules Mmoriss Persistants ISO/ANSI SQL

   SQL/PSM tend SQL en ajoutant :

     * Des extensions de langage procdural
     * Des procdures mmorises multi-instructions
     * Des appels de procdures et de fonctions externes

   SQL/PSM apporte, en plus du fait d'tre un bon outil de dveloppement
   d'application, une base pour des fonctionnalits orientes objet dans
   SQL3.

   Procdures mmorises et multi-instructions

   Multi-instructions et procdures mmorises offrent une grande varit
   d'avantages dans un environnement client/serveur :

     * Performance - Puisqu'une procdure mmorise peut effectuer de
       multiples instructions SQL, les interactions sur le rseau, avec
       le client, sont rduites.
     * Scurit - On peut donner  un utilisateur le droit d'appeler une
       procdure mmorise qui met  jour une table ou un ensemble de
       tables mais lui refuser le droit de mettre  jour les tables
       directement
     * Code partag - Le code d'une procdure mmorise n'a pas  tre
       rcrit ni re-test pour chaque outil d'un client qui accde  la
       base de donnes.
     * Contrle - Fournit un point unique de dfinition et de contrle
       dans la logique de l'application.

   Extensions de Langage Procdural

   Le langage procdural ajoute la puissance d'un langage de
   programmation traditionnel  SQL grce  des instructions de contrle
   de flot et  d'autres constructions utilises en programmation.

   Instructions de contrle de flot

     * If-then-else (si-alors-sinon)
     * Instructions de boucle
     * Prise en compte de erreurs
     * Instruction de choix multiple (Case)
     * Blocks (Begin-End blocks)

   Les extensions de langage procdural comprennent d'autres
   constructions des langages de programmation :

     * Dclaration des variables
     * Instructions d'affectation de valeur
     * Lecture de diagnostiques sur les processus et l'tat

   De plus, toutes les instructions SQL traditionnelles peuvent tre
   inclues dans de procdures multi-instructions.

   Appels de Fonctions et de Procdures externes

   Une fonctionnalit souvent mentionne dans la liste des souhaits pour
   de nombreuses base de donnes et produits et qui est implmente dans
   quelques-uns, est la capacit de pouvoir augmenter les fonctionnalits
   du logiciel de base de donnes d'origine par des appels  des
   procdures externes crites par les utilisateurs.

     * Cela permet  un site ou a une application en particulier
       d'ajouter leurs propres fonctions base de donnes
     * Peuvent tre utilises tout au long des applications bases de
       donnes

   Le bnfice de cette capacit est de donner accs, pour la base de
   donnes (et, par l, aux applications base de donnes),  un riche
   ensemble de procdures et de fonctions trop nombreuses pour tre
   dfinies par un comit de normalisation.

   Planification de SQL/PSM

   SQL/PSM volue rapidement :

     * SQL/PSM est un addendum  SQL-92
     * Un vote international pour faire passer SQL/PSM de Brouillon de
       Norme Internationale  Norme Internationale s'est achev en fin
       janvier 1996.
     * Une runion de travail en mai 1996 n'a pas apport de solution 
       tous les commentaires
     * La poursuite de la runion de travail du PSM est programme du 30
       septembre au 4 octobre 1996
     * Le programme est serr, mais il y a des chances que le PSM le
       publie en 1996.
     * Sa dsignation officielle sera : ISO/IEC DIS 9075-4:199?
       Information technology -- Database languages -- SQL -- Partie 4:
       SQL Persistent Stored Modules (SQL/PSM)
     * L'ajout du support de SQL/PSM dans les fonctionnalits de SQL3 est
       en bonne voie.

24.14 Partie 5 - ISO/ANSI SQL/Liens

   Pour en faciliter l'accs, la description des liens avec le langage de
   programmation a t mise dans un document spar. La version actuelle
   consiste simplement en un extrait concernant les liens dynamiques et
   intgrs de SQL-92.

   Un certain nombre de sujets concernant les liens avec le langage de
   programmation restent en suspens.

   Pour les langage de programmation traditionnels, il existe des
   transformations pour les types de donnes de SQL-92. Cependant, des
   transformations doivent tre dfinis entre les objets SQL et les
   variables des langages de programmation.

   Pour les langages orients objets, la transformation doit tre dfinie
   pour les types de donnes courants SQL et entre le modle objet SQL et
   le modle objet du langage orient objet.

   Le modle objet doit se stabiliser avant de rsoudre ces problmes.

   Les liens avec le langage feront partie intgrante de SQL3.

24.15 Partie 6 - Interface de Spcialisation (SQL/XA) ISO/ANSI SQL XA)

   Cette spcification devrait normaliser l'interface de programmation
   d'application (API) entre un Gestionnaire de Transaction global et le
   Gestionnaire de Ressources SQL. Il devrait normaliser les appels de
   fonction, en s'appuyant sur la smantique de l'ISO/IEC 10026,
   "Distributed Transaction Processing", qu'un Gestionnaire de Ressources
   SQL devrait supporter pour la validation en deux phases. Le document
   de base est driv d'une publication de l'X/Open, avec sa permission,
   qui spcifie explicitement les paramtres d'entre, de sortie et la
   smantique, en termes de types de donnes SQL, pour les fonctions
   suivantes : xa_close, xa_commit, xa_complete, xa_end, xa_forget,
   xa_open, xa_prepare, xa_recover, xa_rollback, et xa_start.

   ISO essaye actuellement de coller aux spcifications XA de l'X/Open.
   Ce processus de suivi, au plus prs, consiste  adopter les
   spcifications de l'industrie sans changements. Le vote pour l'XA 
   l'ISO SC21, JTC 1 a dbut le 27 avril 1995 et se termine le 27
   octobre 1995. Si les spcifications XA sont approuves par 75% des
   votants, et par 2/3 des membres participants de JTC 1, cela deviendra
   une Norme Internationale. Si le vote est approuv, SQL/XA pourrait
   devenir une norme en 1996.

24.16 Partie 7 - ISO/ANSI SQL Temporel

   Le SQL Temporel traite des donnes en relation avec le temps.
   Conceptuellement, cela consiste  dire qu'il est utile d'aller
   chercher des donnes pour dcouvrir l'allure qu'elles avaient  un
   certain moment. L'origine du SQL Temporel rside dans un papier de
   dcembre 1994 de Rick Snodgrass qui en dcrivait les concepts.

   X3 Annonce l'Approbation d'un Nouveau Projet, ISO/IEC 9075 Partie 7 :
   SQL/Temporel est un communiqu de presse concernant le SQL/Temporel.

----------------------------------------------------------------------------
                                SQL Temporel
                                ************
Rick Snodgrass (Prsident du comit TSQL2)
31-Dec-1994

   Plusieurs personnes se sont pos la question de la ncessit de la
   prise en charge de la gestion du temps dans SQL3 (comme cela a t
   propos par DBL RIO-75, demandant qu'une nouvelle partie de SQL prenne
   en charge les bases de donnes temporelles). Le sentiment est que les
   types de donnes abstraits (ADT) sont suffisants pour grer les
   questions de temps. Dans ce papier, je dmontre, par des exemples
   concrets, que l'utilisation de colonnes types, avec des types de
   donnes abstraits, est inadapte pour des requtes temporelles. En
   particulier, beaucoup de requtes temporelles courantes sont soit
   difficiles  simuler en SQL, soit ncessitent d'intgrer SQL dans un
   langage procdural. Des solutions alternatives sont exposes dans
   TSQL2, une extension temporelle  SQL-92.

  INTRODUCTION

   La prise en charge d'un instant de validit va au-del de celle de
   types de donnes temporels abstraits (ADT temporel). Avec ce dernier,
   on spcifie qu'une colonne sera celle consacre au domaine temporel,
   tel que la DATE ou un INTERVALLE (je donnerai des exemples bientt).
   Avec un instant de validit, les lignes d'une table varient en
   fonction du temps, refltant les modifications de la ralit. Le
   timbre dateur associ  une ligne d'une table  instant de validit
   est interprt par le langage d'interrogation comme l'instant o la
   combinaison des valeurs dans les colonnes d'une ligne tait valide. Ce
   timbre dateur implicite permet d'exprimer des requtes de manire
   simple et intuitive.

  TUDE DE CAS - ENREGISTREMENT DE L'INFORMATION COURANTE

   Le bureau du personnel (BP) salari de l'universit de l'Arizona
   possde un certain nombre d'informations, dans une base de donnes,
   dont le nom de chaque employ, son salaire actuel ainsi que son titre.
   On peut reprsenter cela dans une simple table.

        Employee(Name, Salary, Title)

   tant donn cette table, retrouver le salaire d'un employ est une
   opration aise.

        SELECT Salary
        FROM Employee
        WHERE Name = 'Bob'

   Maintenant, le BP souhaite enregistrer les dates de naissance. Pour ce
   faire, on ajoute une colonne  la table, ce qui donne le schma
   suivant.

        Employee(Name, Salary, Title, DateofBirth DATE)

   Retrouver la date de naissance d'un employ est analogue  retrouver
   son salaire.

        SELECT DateofBirth
        FROM Employee
        WHERE Name = 'Bob'

  TUDE DE CAS - ENREGISTREMENT DE L'INFORMATION HISTORIQUE

   Le BP souhaite informatiser l'historique de l'emploi. Pour ce faire,
   ils ajoutent deux colonnes, l'une pour indiquer quand l'information
   contenue dans le ligne est devenue valide, l'autre indiquant la fin de
   validit de cette information.

   Employee (Name, Salary, Title, DateofBirth, Start DATE, Stop DATE)

   Pour le modle de donnes, ces nouvelles colonnes sont identiques  la
   date de naissance. Cependant, leur prsence  des consquences 
   grande chelle.

  TUDE DE CAS - PROJECTION

   Pour trouver le salaire actuel d'un salari, les choses sont plus
   difficiles.

        SELECT Salary
        FROM Employee
        WHERE Name = 'Bob' AND Start <= CURRENT_DATE AND CURRENT_DATE <= Stop

   Cette requte est plus complique que la prcdente. Le coupable se
   situe, de toute vidence, dans ces deux nouvelles colonnes. Le BP veut
   fournir  chaque employ l'historique de leur salaire. Pour chaque
   personne, spcifiquement, il est ncessaire de dterminer les
   intervalles correspondants  chacun des salaires. Malheureusement,
   cela n'est pas possible en SQL. Un employ peut avoir un nombre
   arbitraire de changements de titre entre deux changements de salaire.

Name    Salary  Title             DateofBirth   Start           Stop
----    ------  -----             -----------   -----           ----
Bob     60000   Assistant Provost 1945-04-09    1993-01-01      1993-05-30
Bob     70000   Assistant Provost 1945-04-09    1993-06-01      1993-09-30
Bob     70000   Provost           1945-04-09    1993-10-01      1994-01-31
Bob     70000   Professor         1945-04-09    1994-02-01      1994-12-31

                               Figure 1

   Notez qu'il y a trois lignes pour lesquelles le salaire de Bob reste
   constant  $ 70,000. De l, le rsultat sera de deux lignes pour Bob.

Name    Salary  Start           Stop
----    ------  -----           ----
Bob     60000   1993-01-01      1993-05-30
Bob     70000   1993-06-01      1994-12-31

   Une alternative est de donner  l'utilisateur une dition des
   informations Salaire et Titre, et de laisser l'utilisateur dterminer
   quand son salaire a chang. Cette alternative n'est ni trs attirante
   ni trs raliste. Une seconde alternative est d'utiliser SQL autant
   que possible.

CREATE TABLE Temp(Salary, Start, Stop)
AS      SELECT Salary, Start, Stop
        FROM Employee;

   rpter

        UPDATE Temp T1
        SET (T1.Stop) = (SELECT MAX(T2.Stop)
                         FROM Temp AS T2
                         WHERE T1.Salary = T2.Salary AND T1.Start < T2.Start
                                AND T1.Stop >= T2.Start AND T1.Stop < T2.Stop)
        WHERE EXISTS (SELECT *
                      FROM Temp AS T2
                      WHERE T1.Salary = T2.Salary AND T1.Start < T2.Start
                                AND T1.Stop >= T2.Start AND T1.Stop < T2.Stop)
        jusqu' ce qu'aucune ligne ne soit mise  jour;

DELETE FROM Temp T1

WHERE EXISTS (SELECT *
              FROM Temp AS T2
              WHERE T1.Salary = T2.Salary
                        AND ((T1.Start > T2.Start AND T1.Stop <= T2.Stop)
                        OR (T1.Start >= T2.Start AND T1.Stop < T2.Stop))

   La boucle trouve des intervalles qui se chevauchent ou sont adjacents
   et, doivent donc tre fusionns. La boucle est excute log N fois
   dans le pire des cas, o N est le nombre de lignes dans une chane de
   lignes de valeur quivalente qui se chevauchent ou sont adjacentes. Le
   lecteur peut simuler cette requte sur la table de l'exemple pour se
   convaincre de sa vrit.

   Une troisime alternative consiste  utiliser SQL uniquement pour
   ouvrir un curseur sur la table. Une liste chane de priodes est
   entretenue, chacune avec un salaire. La liste chane doit tre
   initialise vide.

DECLARE emp_cursor CURSOR FOR
        SELECT Salary, Title, Start, Stop
        FROM Employee;
OPEN emp_cursor;
boucle:
        FETCH emp_cursor INTO :salary, :start, :stop;
        si pas-de-donnes est retourn alors aller  fin;
        trouver la position dans la liste chane pour insrer cette informatio
n;
        aller  boucle;
fin:
CLOSE emp_cursor;

   Rpter tout au long de la liste chane, dition des dates et des
   salaires

   La liste chane peut ne pas tre ncessaire au cas o le curseur est
   ORDER BY Start.

   Dans tous les cas, la requte, tout ce qu'il y a de naturelle, est
   tout  fait difficile  exprimer en utilisant les possibilits
   offertes par SQL-92. La requte est triviale en TSQL2.

        SELECT Salary
        FROM Employee

  TUDE DE CAS - JOINTURE

   Une approche plus drastique consiste  viter le problme d'extraction
   de l'historique du salaire en rorganisant le schma pour sparer les
   informations de salaire, de titre, et de date de naissance (dans ce
   qui suit, nous ignorerons la date de naissance pour raison de
   simplicit).

        Employee1 (Name, Salary, Start DATE, Stop DATE)
        Employee2 (Name, Title, Start DATE, Stop DATE)

   La table Employee1 est la suivante.

Name    Salary  Start           Stop
----    ------  -----           ----
Bob     60000   1993-01-01      1993-05-30
Bob     70000   1993-06-01      1993-12-31

   Voici un exemple de la table Employee2.

Name    Title                   Start           Stop
----    ------                  -----           ----
Bob     Assistant Provost       1993-01-01      1993-09-30
Bob     Provost                 1993-10-01      1994-01-31
Bob     Professor               1994-02-01      1994-12-31

   Avec cette modification, aller chercher l'information de salaire d'un
   employ devient maintenant facile.

        SELECT Salary, Start, Stop
        FROM Employee1
        WHERE Name = 'Bob'

   Mais qu'en est-il si le BP veut une table des salaires, des
   intervalles de titre (c'est--dire, supposons que le BP veuille qu'une
   table soit calcule dans la forme de la Figure 1)? Une alternative est
   d'diter les deux tables, et de laisser l'utilisateur en calculer les
   combinaisons. Une seconde alternative est d'utiliser entirement SQL.
   Malheureusement, cette requte doit faire une tude de cas sur la
   manire dont chaque ligne de Employee1 se chevauche avec chaque ligne
   de Employee2; il y a quatre cas possibles.

SELECT Employee1.Name, Salary, Dept, Employee1.Start, Employee1.Stop
FROM Employee1, Employee2
WHERE Employee1.Name = Employee2.Name
     AND Employee2.Start <= Employee1.Start AND Employee1.Stop < Employee2.Stop
UNION
SELECT Employee1.Name, Salary, Dept, Employee1.Start, Employee2.Stop
FROM Employee1, Employee2
WHERE Employee1.Name = Employee2.Name
     AND Employee1.Start >= Employee2.Start AND Employee2.Stop < Employee1.Stop
        AND Employee1.Start < Employee2.Stop
UNION
SELECT Employee1.Name, Salary, Dept, Employee2.Start, Employee1.Stop
FROM Employee1, Employee2
WHERE Employee1.Name = Employee2.Name
     AND Employee2.Start > Employee1.Start AND Employee1.Stop < Employee2.Stop
        AND Employee2.Start < Employee1.Stop
UNION
SELECT Employee1.Name, Salary, Dept, Employee2.Start, Employee2.Stop
FROM Employee1, Employee2
WHERE Employee1.Name = Employee2.Name
     AND Employee2.Start > Employee1.Start AND Employee2.Stop < Employee1.Stop

   Prendre en compte, d'une faon correcte, tous les cas constitue une
   tche qui relve du challenge. En TSQL2, raliser une jointure
   temporelle correspond simplement  ce que l'on peut esprer.

        SELECT Employee1.Name, Salary, Dept
        FROM Employee1, Employee2
        WHERE Employee1.Name = Employee2.Name

  TUDE DE CAS - AGRGATS

   Maintenant, on demande au BP quel est le salaire maximum ? Avant
   d'ajouter les donnes de temps, c'tait facile.

        SELECT MAX(Salary)
        FROM Employee

   Maintenant que l'historique du salaire est enregistr, nous
   obtiendrons quelque chose comme l'historique du salaire maximum 
   travers le temps. Le problme est que, naturellement, SQL ne fournit
   pas d'agrgats temporels. Le moyen simple de raliser cela consiste 
   diter l'information, et  chercher,  la main, le maximum. Une
   alternative consiste  tre plus astucieux et  convertir l'instantan
   de la requte agrge en une requte non agrge, puis  convertir le
   rsultat en requte temporelle. La requte non agrge retrouve les
   salaires pour lesquels un salaire plus lev n'existe pas.

        SELECT Salary
        FROM Employee AS E1
        WHERE NOT EXISTS (SELECT *
                          FROM Employee AS E2
                          WHERE E2.Salary > E1.Salary)

   Convertir cette requte en une requte temporelle est loin d'tre
   vident. Ce qui suit constitue une approche possible.

CREATE TABLE Temp (Salary, Start, Stop)
AS      SELECT Salary, Start, Stop
        FROM Employee;
INSERT INTO Temp
        SELECT T.Salary, T.Start, E.Start
        FROM Temp AS T, Employee AS E
        WHERE E.Start >= T.Start AND E.Start < T.Stop AND E.Salary > T.Salary;

INSERT INTO Temp
        SELECT T.Salary, T.Stop, E.Stop
        FROM Temp AS T, Employee AS E
        WHERE E.Stop > T.Start AND E.Stop <= T.Stop AND E.Salary > T.Salary;
DELETE FROM Temp T
WHERE EXISTS (SELECT *
              FROM Employee AS E
              WHERE ((T.Start => E.Start AND T.Start < E.Stop)
                        OR (E.Start >= T.Start AND E.Start < T.Stop))
                    AND E.Salary > T.Salary;

   Cette approche cre une table auxiliaire. Nous ajoutons  cette table
   la priode infrieure soustraite d'une priode et la partie suprieure
   soustraite d'une priode. Nous supprimons alors toutes les priodes
   qui se chevauchent avec une ligne dfinie dans la sous-requte, de ce
   fait ralisant le NOT EXISTS(n'existe pas). Finalement nous gnrons 
   partir de la table auxiliaire les priodes maximales, de la mme faon
   que l'information de salaire avait t calcule ci-dessus. Comme on
   peut l'imaginer, un tel code SQLest extrmement inefficace 
   l'excution, compte tenu des requtes complexes imbriques contenant
   des prdicats d'ingalit.

   Une troisime alternative consiste  utiliser le moins possible SQL,
   et plutt de calculer le maximum dsir dans un langage hte en
   utilisant des curseurs.

   La requte en TSQL2 est de nouveau simple et intuitive.

        SELECT MAX(Salary)
        FROM Employee

  RSUM

   Dans la plupart des applications de base de donnes on manipule des
   donnes qui changent en fonction du temps. La prise en compte de
   l'instant de validit est absente de SQL. Beaucoup de requtes
   temporelles ordinaires sont difficiles  simuler en SQL, ou requirent
   du SQL intgr dans un langage procdural, ceci tant d au manque de
   support des tables avec instant de validit dans son modle de donnes
   et dans la structure des requtes.

   Ailleurs, nous avons montr que l'ajout du support de l'instant de
   validit ne requiert que peu de modifications dans l'implmentation
   des SGDB, peut radicalement simplifier un certain nombre de requtes
   et en permettre d'autres, et peut, plus tard, permettre des
   optimisations dans les structures de mmoires, les mthodes
   d'indexation et les stratgies d'optimisation qui peuvent entraner
   des amliorations notables dans les performances.

   Avec une nouvelle partie de SQL3 supportant les informations qui
   varient avec le temps, permettant une meilleure gestion des donnes
   temporelles par SQL3, nous pouvons commencer  apporter une rponse 
   de telles application.

----------------------------------------------------------------------------
           Comit de Normalisation Accrdit* X3, Technologie de L'Information
COMMUNIQUE

Doc. No.:       PR/96-0002

Reply to:       Barbara Bennett at bbennett@itic.nw.dc.us

             X3 Annonce l'approbation d'un Nouveau Projet, ISO/IEC

                         9075 Partie 7:  SQL/Temporal

Washington D.C., Janvier 1996
----------------------------------------------------------------------------

   -- Le Comit de Normalisation Accrdit X3, Technologie de
   l'Information, annonce l'approbation d'un nouveau projet concernant le
   support de SQL/Temporel , ISO/IEC 9075 Partie 7, le travail devant
   tre ralis au sein du Comit Technique X3H2, Bases de Donnes. Cette
   proposition de norme concerne un nouvelle partie de la norme naissante
   SQL3, e.g., Partie 7, SQL Temporel, et spcifie les extensions au
   langage SQL pour grer le stockage, l'extraction et la manipulation
   des donnes temporelles dans un environnement de base de donnes SQL.

   La prochaine runion du comit X3H2 est planifi pour la priode du 11
   au 14 Mars 1996 dans le Kansas.

   Les questions concernant ce projet doivent tre envoyes au prsident
   de X3H2 :

        Chairman of X3H2,
        Dr. Donald R. Deutsch,
        Sybase, Inc., Suite 800,
        6550 Rock Spring
        Drive, Bethesda, MD  20817.
        Email: deutsch@sybase.com.

   Un appel initial pour de possibles brevets ou autres sujets pertinents
   (copyrights, trademarks) est sur le point d'tre mis. Soumettez, s'il
   vous plat, les informations  ce propos au secrtariat de X3  :

        X3 Secretariat
        1250 Eye Street
        NW, Suite 200,
        Washington DC  20005.
        Email: x3sec@itic.nw.dc.us
        FAX:  (202)638-4922.

24.17 Partie 8 - SQL MULTIMEDIA ISO/ANSI (SQL/MM)

   Un nouveau projet international de normalisation ISO/IEC pour le
   dveloppement d'une bibliothque de classe SQL pour les applications
   multi-media a t approuv dbut 1993. Cette nouvelle activit de
   normalisation, appele SQL Multi-media (SQL/MM), spcifiera les
   paquetages de dfinition de types de donnes abstraites SQL (ADT) en
   utilisant les fonctions fournies dans les spcifications SQL3
   naissantes pour ADT. SQL/MM a pour objectif de normaliser des
   bibliothques de classes pour la science et l'ingnierie, le
   traitement des textes et des documents, ainsi que des mthodes pour la
   gestion d'objets multi-media tels que les images, les sons, les
   animations, la musique et la vido. Il fournira vraisemblablement un
   lien entre le langage SQL et les objets multi-media dfinis par les
   autres entits de normalisation du JTC1 (e.g. SC18 pour les documents,
   SC24 pour les images, et SC29 pour les photographies et les images
   animes).

   Le Plan du Projet pour SQL/MM prvoit que ce sera une norme
   multi-parties dont le nombre de parties pourra voluer. La partie 1
   consistera en un cadre spcifiant comment les autres parties doivent
   tre architectur. Chacune de ces autres parties sera consacre  un
   paquetage d'application SQL spcifique. En aot 1994, la structure
   existante tait la suivante :

     * Partie 1: Cadre - Description non technique de la manire dont le
       document est structur.
     * Partie 2: Mthodes pour le Texte et ADT (types de donnes
       abstraits) pour le traitement des textes. Environ 45 pages.
     * Partie 3: Mthodes Spatiales et ADT pour la gestion des donnes
       spatiales Environ 200 pages avec l'active contribution d'experts
       en Donnes Spatiales de 3 entits nationales.
     * Partie 4: Mthode  Usage Gnral et ADT pour les nombres
       complexes, et des fonctionnalits incluant la trigonomtrie et les
       fonctions exponentielles les vecteurs, les ensembles etc.
       Actuellement environ 90 pages.

   On assiste  des efforts de normalisation dans le domaine des
   informations Spatiales et Gographiques :

     * ANSI X3L1 - Systmes d'Information Gographique. Mark Ashworth de
       Unisys est charg de la liaison entre X3L1 et ANSI X3H2. Il est
       galement le rdacteur des parties 1, 3, and 4 du brouillon de
       SQL/MM.
     * ISO TC 211 - Information gographique/Gomatique.

25. Support Technique pour PostgreSQL

   Si vous avez des questions techniques ou si vous rencontrez des
   problmes vous pouvez envoyer un courrier lectronique  :
     * pgsql-questions@postgresql.org

   et vous recevrez par courrier lectronique une rponse dans la journe
   qui suit. Comme le nombre de produits internet est trs large, et que
   les utilisateurs aident les autres utilisateurs, internet est capable
   d'apporter facilement un support technique  des millions
   d'utilisateurs. Le support par Email est de loin beaucoup plus adapt
   que celui effectu par tlphone car on peut rcuprer les messages
   d'erreur, les sorties de programme etc... et les transmettre
   facilement dans les listes de diffusion ou les forums.

   Dans un futur proche, l'organisation PostgreSQL vendra un support
   technique aux petites et grandes compagnies, les revenus de cette
   activit serviront  entretenir plusieurs sites miroirs (web et ftp)
   partout dans le monde. Ces revenus pourront aussi servir  crer une
   documentation imprime, des guides, des livres pour aider les clients.
   Les profits seront galement utiliss  construire des
   immeubles/salles de classe et  offrir des cours techniques sur
   l'administration et la gestion des bases de donnes et  organiser des
   confrences annuelles pour les utilisateurs. Ceci devrait aider
   l'organisation PostgreSQL  se dbrouiller toute seule.

   Vous pouvez aussi vous faire aider par des socits de conseil
   professionnelles telles que Anderson, WGS (Work Group Solutions). Pour
   de l'aide, puisqu'ils ont une trs bonne expertise en "C", "C++"
   (PostgreSQL est crit en "C"), contactez les  -
     * Work Group Solutions http://www.wgs.com
     * Anderson Consulting http://www.ac.com

26. Aspects conomiques et Commerciaux

   Les bases de donnes commerciales paient de nombreuses taxes telles
   que des taxes fdrales, d'tat, sur les ventes, sur les salaris, la
   scurit sociale, les taxes pour les soins mdicaux, des indemnits
   pour les employs, des cots de marketing et de publicit. Tous ces
   cots ne sont pas destins directement au dveloppement de la base de
   donne. Quand vous achetez une base de donnes commerciale une partie
   du montant est destin aux taxes, aux dpenses de recherche et
   dveloppement ( R&D ). Donc la valeur relle pour la base de donnes
   est beaucoup plus faible.

   De plus les bases de donnes commerciales doivent payer pour leurs
   immeubles/biens et pour l'achat de machines Unix, leur installation et
   leur maintenance. Tous ces cots sont rpercuts sur les clients.

   PostgreSQL possde l'avantage, sur les bases de donnes commerciales,
   de ne pas supporter de taxes puisque dveloppe sur l'internet. Un
   trs grand nombre de personnes contribuent  son dveloppement. Par
   exemple, cas hypothtique, s'il y a un million de compagnies aux U.S.A
   et que chacune contribue pour environ $ 10 (en valeur de logiciel pour
   PostgreSQL) alors, chaque compagnie recevra dix millions de dollars!!
   C'est cela la _GRANDE MAGIE _du dveloppement sur internet.

   Actuellement, le code source de PostgreSQL est constitu d'environ 200
   000 lignes de code "C" et "C++". Si le cot de chaque ligne de code
   "C" est valu  $ 10, alors le cot total de PostgreSQL, tel qu'il
   est aujourd'hui est de $ 2 000 000 (deux millions de dollars!!).

   De nombreuses compagnies ont dj dvelopp de grandes quantits de
   code "C", "C++" maison. Donc, en prenant le code source de PostgreSQL
   et en collaborant avec les autres compagnies sur internet, cela leur
   bnficierait beaucoup en leur faisant conomiser du temps et des
   efforts.

27. Liste des autre Bases de Donnes

   On trouvera ci-dessous la liste des autres bases de donnes SQL pour
   Unix, Linux.
     * Cliquez et allez  Applications->databases.
       http://www.caldera.com/tech-ref/linuxapps/linapps.html
     * Cliquez et allez  Applications->databases.
       http://www.xnet.com/~blatura/linapps.shtml
     * Ressources pour Bases de Donnes http://linas.org/linux/db.html
     * Liste des Bases de Donnes libres
       http://cuiwww.unige.ch:80/~scg/FreeDB/FreeDB.list.html
     * Liste des SGBDR de Browne http://www.hex.net/~cbbrowne/rdbms.html
       crit par Christopher B. Browne cbbrowne@hex.net
     * Liste des SGBDR de SAL http://SAL.KachinaTech.COM/H/1/
     * Liste des SGBD Orients Objets de SAL
       http://SAL.KachinaTech.COM/H/2/
     * Liste des Utilitaires et d'Autres SGDB de SAL
       http://SAL.KachinaTech.COM/H/3/
     * Index des Logiciels de Base de Donnes Publics de l'ACM SIGMOD
       http://bunny.cs.uiuc.edu/sigmod/databaseSoftware/

28. Indications pour la recherche sur le World Wide Web Internet

   Internet est immense, recle un trs grand nombre de logiciels et un
   ocan d'informations. Il s'accrot  la vitesse de 500% par an. On
   estime le nombre de sites Web  environ 90 million dans le monde
   entier!

   Utilisez des moteurs de recherche tels que "Yahoo", "Netscape",
   "Lycos" etc. pour trouver une information. Allez sur Yahoo, et cliquez
   sur recherche. Utilisez les options de filtrage pour affiner vos
   critres de recherche. La mthode de recherche par dfaut consiste en
   une "recherche intelligente" qui est plus gnrale et donne toutes les
   possibilits. Cliquez sur "Options" et slectionnez la recherche par
   "EXACT phrase" , par "AND" , par "OR" , etc... De cette manire vous
   trouverez l'information que vous cherchez beaucoup plus rapidement.
   Dans le menu de recherche, il y a galement des boutons pour une
   recherche dans Usenet, dans les sites Web et les sites Yahoo.

29. Conclusion

   Aprs avoir cherch toutes les bases de donnes disponibles qui soient
   libres et dont le code source soit disponible, j'ai trouv que SEUL
   PostgreSQL, le SGBDR (Relationnel Objet)SQL libre, est le PLUS mature
   et le plus largement utilis au monde. PostgreSQL est trs attractif
   en ce que beaucoup de travail a dj t effectu et qu'il possde des
   pilotes ODBC et JDBC permettant d'crire des applications
   indpendantes des bases de donnes. Les applications crites en
   PostgreSQL qui utilisent les pilotes ODBC, JDBC sont facilement
   portables sur d'autres systmes tels que Oracle, Sybase et Informix et
   vice versa.

   Vous pouvez vous demander "Mais pourquoi PostgreSQL ?" La rponse 
   cela est que puisqu'il faut pas mal de temps pour dvelopper un
   systme de gestion de base de donnes ex nihilo, il est plus
   raisonnable d'en utiliser un qui satisfasse aux conditions suivantes -

   Un systme de gestion de base de donnes
     * Dont le code source soit disponible, ce doit tre un systme 
       "code source ouvert"
     * Qui ne ncessite pas de licence, qui n'a pas de doits de proprit
     * Qui puisse tre distribu sur internet
     * Qui a ncessit plusieurs annes de dveloppement.
     * Qui satisfasse des standards tels que ISO/ANSI SQL 92 (and SQL 89)
     * Qui puisse rpondre aux besoins futurs telles que SQL 3 (SQL 98)
     * Qui possde des fonctionnalits avances

   Et, justement, il appert que c'est 'PostgreSQL' qui rpond  tous ces
   critres et que c'est un logiciel appropri dans ce cas.

30. FAQ - Questions sur PostgreSQL

   Veuillez vous rfrer  la dernire version de la FAQ pour les
   questions gnrales, celles concernant Linux et Irix  :
     * http://www.postgresql.org/docs/faq-english.shtml

31. Notice de Copyright

   Copyright (c) 1997 Al Dev (Alavoor Vasudevan). Tous droits rservs.

   AUCUNE RESPONSABILIT NE SAURAIT TRE RETENUE POUR DES DOMMAGES
   CONSCUTIFS A L'UTILISATION DE TOUT OU PARTIE DE CE DOCUMENT. En aucun
   cas l'auteur ou le traducteur de ce document ne pourra tre tenu pour
   responsable vis--vis de de qui que ce soit pour tous dommages quels
   qu'ils soient (y compris et sans limitation, spcial, fortuit,
   conscutif, blessures directes ou indirectes pour les personnes,
   pertes financires dues au manque  gagner,  l'interruption
   d'activit, pertes d'informations commerciales ou toutes autres pertes
   financires) rsultant de l'utilisation de ce document.

   L'auteur et le traducteur n'offrent aucunes garanties sur
   l'adquation, l'utilit ou la valeur marchande de ce document. Les
   marques, les compagnies et les noms de produits mentionns dans ce
   document sont des marques de fabrique ou des marques dposes de leurs
   propritaires respectifs. Veuillez vous rfrer aux notices de
   copyright individuelles des marques, compagnies et produits mentionns
   dans ce document. Il est de votre responsabilit de lire et de
   comprendre les notices de copyright des
   organisations/compagnies/produits/auteurs mentionns dans ce document
   avant d'utiliser leurs informations respectives.

32. Appendice A - Syntaxe de l' ANSI/ISO SQL 1992


Ce fichier contient la grammaire en BNF du langage, arborescence
explore d'abord en profondeur, ralise le 27-AOT-1992 11:03:41.64.
La version spcifique de BNF donne ici est :
ANSI et SQL2-seulement.


<SQL terminal character> ::=
      <SQL language character>
    | <SQL embedded language character>

<SQL language character> ::=
      <simple Latin letter>
    | <digit>
    | <SQL special character>

<simple Latin letter> ::=
      <simple Latin upper case letter>
    | <simple Latin lower case letter>

<simple Latin upper case letter> ::=
          A | B | C | D | E | F | G | H | I | J | K | L | M | N | O
    | P | Q | R | S | T | U | V | W | X | Y | Z

<simple Latin lower case letter> ::=
          a | b | c | d | e | f | g | h | i | j | k | l | m | n | o
    | p | q | r | s | t | u | v | w | x | y | z

<digit> ::=
    0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<SQL special character> ::=
      <space>
    | <double quote>
    | <percent>
    | <ampersand>
    | <quote>
    | <left paren>
    | <right paren>
    | <asterisk>
    | <plus sign>
    | <comma>
    | <minus sign>
    | <period>
    | <solidus>
    | <colon>
    | <semicolon>
    | <less than operator>
    | <equals operator>
    | <greater than operator>
    | <question mark>
    | <underscore>
    | <vertical bar>

<space> ::= !! <EMPHASIS>(space character in character set in use)

<double quote> ::= "

<percent> ::= %

<ampersand> ::= &

<quote> ::= '

<left paren> ::= (

<right paren> ::= )

<asterisk> ::= *

<plus sign> ::= +

<comma> ::= ,

<minus sign> ::= -

<period> ::= .

<solidus> ::= /

<colon> ::= :

<semicolon> ::= ;

<less than operator> ::= <

<equals operator> ::= =

<greater than operator> ::= >

<question mark> ::= ?

<underscore> ::= _

<vertical bar> ::= |

<SQL embedded language character> ::=
      <left bracket>
    | <right bracket>

<left bracket> ::= [

<right bracket> ::= ]

<token> ::=
      <nondelimiter token>
    | <delimiter token>

<nondelimiter token> ::=
      <regular identifier>
    | <key word>
    | <unsigned numeric literal>
    | <national character string literal>
    | <bit string literal>
    | <hex string literal>

<regular identifier> ::= <identifier body>

<identifier body> ::=
    <identifier start> [ ( <underscore> | <identifier part> )... ]

<identifier start> ::= <EMPHASIS>(!! See the Syntax Rules)

<identifier part> ::=
      <identifier start>
    | <digit>

<key word> ::=
      <reserved word>
    | <non-reserved word>

<reserved word> ::=
      ABSOLUTE | ACTION | ADD | ALL
    | ALLOCATE | ALTER | AND
    | ANY | ARE
    | AS | ASC
    | ASSERTION | AT
    | AUTHORIZATION | AVG
    | BEGIN | BETWEEN | BIT | BIT_LENGTH
    | BOTH | BY
    | CASCADE | CASCADED | CASE | CAST
    | CATALOG
    | CHAR | CHARACTER | CHAR_LENGTH
    | CHARACTER_LENGTH | CHECK | CLOSE | COALESCE
    | COLLATE | COLLATION
    | COLUMN | COMMIT
    | CONNECT
    | CONNECTION | CONSTRAINT
    | CONSTRAINTS | CONTINUE
    | CONVERT | CORRESPONDING | COUNT | CREATE | CROSS
    | CURRENT
    | CURRENT_DATE | CURRENT_TIME
    | CURRENT_TIMESTAMP | CURRENT_USER | CURSOR
    | DATE | DAY | DEALLOCATE | DEC
    | DECIMAL | DECLARE | DEFAULT | DEFERRABLE
    | DEFERRED | DELETE | DESC | DESCRIBE | DESCRIPTOR
    | DIAGNOSTICS
    | DISCONNECT | DISTINCT | DOMAIN | DOUBLE | DROP
    | ELSE | END | END-EXEC | ESCAPE
    | EXCEPT | EXCEPTION
    | EXEC | EXECUTE | EXISTS
    | EXTERNAL | EXTRACT
    | FALSE | FETCH | FIRST | FLOAT | FOR
    | FOREIGN | FOUND | FROM | FULL
    | GET | GLOBAL | GO | GOTO
    | GRANT | GROUP
    | HAVING | HOUR
    | IDENTITY | IMMEDIATE | IN | INDICATOR
    | INITIALLY | INNER | INPUT
    | INSENSITIVE | INSERT | INT | INTEGER | INTERSECT
    | INTERVAL | INTO | IS
    | ISOLATION
    | JOIN
    | KEY
    | LANGUAGE | LAST | LEADING | LEFT
    | LEVEL | LIKE | LOCAL | LOWER
    | MATCH | MAX | MIN | MINUTE | MODULE
    | MONTH
    | NAMES | NATIONAL | NATURAL | NCHAR | NEXT | NO
    | NOT | NULL
    | NULLIF | NUMERIC
    | OCTET_LENGTH | OF
    | ON | ONLY | OPEN | OPTION | OR
    | ORDER | OUTER
    | OUTPUT | OVERLAPS
    | PAD | PARTIAL | POSITION | PRECISION | PREPARE
    | PRESERVE | PRIMARY
    | PRIOR | PRIVILEGES | PROCEDURE | PUBLIC
    | READ | REAL | REFERENCES | RELATIVE | RESTRICT
    | REVOKE | RIGHT
    | ROLLBACK | ROWS
    | SCHEMA | SCROLL | SECOND | SECTION
    | SELECT
    | SESSION | SESSION_USER | SET
    | SIZE | SMALLINT | SOME | SPACE | SQL | SQLCODE
    | SQLERROR | SQLSTATE
    | SUBSTRING | SUM | SYSTEM_USER
    | TABLE | TEMPORARY
    | THEN | TIME | TIMESTAMP
    | TIMEZONE_HOUR | TIMEZONE_MINUTE
    | TO | TRAILING | TRANSACTION
    | TRANSLATE | TRANSLATION | TRIM | TRUE
    | UNION | UNIQUE | UNKNOWN | UPDATE | UPPER | USAGE
    | USER | USING
    | VALUE | VALUES | VARCHAR | VARYING | VIEW
    | WHEN | WHENEVER | WHERE | WITH | WORK | WRITE
    | YEAR
    | ZONE

<non-reserved word> ::=

      ADA
    | C | CATALOG_NAME
    | CHARACTER_SET_CATALOG | CHARACTER_SET_NAME
    | CHARACTER_SET_SCHEMA | CLASS_ORIGIN | COBOL | COLLATION_CATALOG
    | COLLATION_NAME | COLLATION_SCHEMA | COLUMN_NAME | COMMAND_FUNCTION
    | COMMITTED
    | CONDITION_NUMBER | CONNECTION_NAME | CONSTRAINT_CATALOG | CONSTRAINT_NAME
    | CONSTRAINT_SCHEMA | CURSOR_NAME
    | DATA | DATETIME_INTERVAL_CODE
    | DATETIME_INTERVAL_PRECISION | DYNAMIC_FUNCTION
    | FORTRAN
    | LENGTH
    | MESSAGE_LENGTH | MESSAGE_OCTET_LENGTH | MESSAGE_TEXT | MORE | MUMPS
    | NAME | NULLABLE | NUMBER
    | PASCAL | PLI
    | REPEATABLE | RETURNED_LENGTH | RETURNED_OCTET_LENGTH | RETURNED_SQLSTATE
    | ROW_COUNT
    | SCALE | SCHEMA_NAME | SERIALIZABLE | SERVER_NAME | SUBCLASS_ORIGIN
    | TABLE_NAME | TYPE
    | UNCOMMITTED | UNNAMED

<unsigned numeric literal> ::=
      <exact numeric literal>
    | <approximate numeric literal>

<exact numeric literal> ::=
      <unsigned integer> [ <period> [ <unsigned integer> ] ]
    | <period> <unsigned integer>

<unsigned integer> ::= <digit>...

<approximate numeric literal> ::= <mantissa> E <exponent>

<mantissa> ::= <exact numeric literal>

<exponent> ::= <signed integer>

<signed integer> ::= [ <sign> ] <unsigned integer>

<sign> ::= <plus sign> | <minus sign>

<national character string literal> ::=
    N <quote> [ <character representation>... ] <quote>
      [ ( <separator>... <quote> [ <character representation>... ] <quote> )...
 ]

<character representation> ::=
      <nonquote character>
    | <quote symbol>

<nonquote character> ::= !! <EMPHASIS>(See the Syntax Rules.)

<quote symbol> ::= <quote><quote>

<separator> ::= ( <comment> | <space> | <newline> )...

<comment> ::=
    <comment introducer> [ <comment character>... ] <newline>

<comment introducer> ::= <minus sign><minus sign>[<minus sign>...]

<comment character> ::=
      <nonquote character>
    | <quote>

<newline> ::= !! <EMPHASIS>(implementation-defined end-of-line indicator)

<bit string literal> ::=
    B <quote> [ <bit>... ] <quote>
      [ ( <separator>... <quote> [ <bit>... ] <quote> )... ]

<bit> ::= 0 | 1

<hex string literal> ::=
    X <quote> [ <hexit>... ] <quote>
      [ ( <separator>... <quote> [ <hexit>... ] <quote> )... ]

<hexit> ::= <digit> | A | B | C | D | E | F | a | b | c | d | e | f

<delimiter token> ::=
      <character string literal>
    | <date string>
    | <time string>
    | <timestamp string>
    | <interval string>
    | <delimited identifier>
    | <SQL special character>
    | <not equals operator>
    | <greater than or equals operator>
    | <less than or equals operator>
    | <concatenation operator>
    | <double period>
    | <left bracket>
    | <right bracket>

<character string literal> ::=
    [ <introducer><character set specification> ]
    <quote> [ <character representation>... ] <quote>
      [ ( <separator>... <quote> [ <character representation>... ] <quote> )...
 ]

<introducer> ::= <underscore>

<character set specification> ::=
      <standard character repertoire name>
    | <implementation-defined character repertoire name>
    | <user-defined character repertoire name>
    | <standard universal character form-of-use name>
    | <implementation-defined universal character form-of-use name>

<standard character repertoire name> ::= <character set name>

<character set name> ::= [ <schema name> <period> ]
      <SQL language identifier>

<schema name> ::=
    [ <catalog name> <period> ] <unqualified schema name>

<catalog name> ::= <identifier>

<identifier> ::=
    [ <introducer><character set specification> ] <actual identifier>

<actual identifier> ::=
      <regular identifier>
    | <delimited identifier>

<delimited identifier> ::=
    <double quote> <delimited identifier body> <double quote>

<delimited identifier body> ::= <delimited identifier part>...

<delimited identifier part> ::=
      <nondoublequote character>
    | <doublequote symbol>

<nondoublequote character> ::= <EMPHASIS>(!! See the Syntax Rules)

<doublequote symbol> ::= <double quote><double quote>

<unqualified schema name> ::= <identifier>

<SQL language identifier> ::=
    <SQL language identifier start>
       [ ( <underscore> | <SQL language identifier part> )... ]

<SQL language identifier start> ::= <simple Latin letter>

<SQL language identifier part> ::=
      <simple Latin letter>
    | <digit>

<implementation-defined character repertoire name> ::=
    <character set name>

<user-defined character repertoire name> ::= <character set name>

<standard universal character form-of-use name> ::=
    <character set name>

<implementation-defined universal character form-of-use name> ::=
    <character set name>

<date string> ::=
    <quote> <date value> <quote>

<date value> ::=
    <years value> <minus sign> <months value>
        <minus sign> <days value>

<years value> ::= <datetime value>

<datetime value> ::= <unsigned integer>

<months value> ::= <datetime value>

<days value> ::= <datetime value>

<time string> ::=
    <quote> <time value> [ <time zone interval> ] <quote>

<time value> ::=
    <hours value> <colon> <minutes value> <colon> <seconds value>

<hours value> ::= <datetime value>

<minutes value> ::= <datetime value>

<seconds value> ::=
      <seconds integer value> [ <period> [ <seconds fraction> ] ]

<seconds integer value> ::= <unsigned integer>

<seconds fraction> ::= <unsigned integer>

<time zone interval> ::=
    <sign> <hours value> <colon> <minutes value>

<timestamp string> ::=
    <quote> <date value> <space> <time value>
        [ <time zone interval> ] <quote>

<interval string> ::=
    <quote> ( <year-month literal> | <day-time literal> ) <quote>

<year-month literal> ::=
      <years value>
    | [ <years value> <minus sign> ] <months value>

<day-time literal> ::=
      <day-time interval>
    | <time interval>

<day-time interval> ::=
    <days value>
      [ <space> <hours value> [ <colon> <minutes value>
        [ <colon> <seconds value> ] ] ]

<time interval> ::=
      <hours value> [ <colon> <minutes value> [ <colon> <seconds value> ] ]
    | <minutes value> [ <colon> <seconds value> ]
    | <seconds value>

<not equals operator> ::= <>

<greater than or equals operator> ::= >=

<less than or equals operator> ::= <=

<concatenation operator> ::= ||

<double period> ::= ..

<module> ::=
    <module name clause>
    <language clause>
    <module authorization clause>
    [ <temporary table declaration>... ]
    <module contents>...

<module name clause> ::=
    MODULE [ <module name> ]
      [ <module character set specification> ]

<module name> ::= <identifier>

<module character set specification> ::=
    NAMES ARE <character set specification>

<language clause> ::=
    LANGUAGE <language name>

<language name> ::=
    ADA | C | COBOL | FORTRAN | MUMPS | PASCAL | PLI

<module authorization clause> ::=
      SCHEMA <schema name>
    | AUTHORIZATION <module authorization identifier>
    | SCHEMA <schema name>
          AUTHORIZATION <module authorization identifier>

<module authorization identifier> ::=
    <authorization identifier>

<authorization identifier> ::= <identifier>

<temporary table declaration> ::=
    DECLARE LOCAL TEMPORARY TABLE
        <qualified local table name>
      <table element list>
      [ ON COMMIT ( PRESERVE | DELETE ) ROWS ]

<qualified local table name> ::=
    MODULE <period> <local table name>

<local table name> ::= <qualified identifier>

<qualified identifier> ::= <identifier>

<table element list> ::=
      <left paren> <table element> [ ( <comma> <table element> )... ] <right pa
ren>

<table element> ::=
      <column definition>
    | <table constraint definition>

<column definition> ::=
    <column name> ( <data type> | <domain name> )
    [ <default clause> ]
    [ <column constraint definition>... ]
    [ <collate clause> ]

<column name> ::= <identifier>

<data type> ::=
      <character string type>
           [ CHARACTER SET <character set specification> ]
    | <national character string type>
    | <bit string type>
    | <numeric type>
    | <datetime type>
    | <interval type>

<character string type> ::=
      CHARACTER [ <left paren> <length> <right paren> ]
    | CHAR [ <left paren> <length> <right paren> ]
    | CHARACTER VARYING <left paren> <length> <right paren>
    | CHAR VARYING <left paren> <length> <right paren>
    | VARCHAR <left paren> <length> <right paren>

<length> ::= <unsigned integer>

<national character string type> ::=
      NATIONAL CHARACTER [ <left paren> <length> <right paren> ]
    | NATIONAL CHAR [ <left paren> <length> <right paren> ]
    | NCHAR [ <left paren> <length> <right paren> ]
    | NATIONAL CHARACTER VARYING <left paren> <length> <right paren>
    | NATIONAL CHAR VARYING <left paren> <length> <right paren>
    | NCHAR VARYING <left paren> <length> <right paren>

<bit string type> ::=
      BIT [ <left paren> <length> <right paren> ]
    | BIT VARYING <left paren> <length> <right paren>

<numeric type> ::=
      <exact numeric type>
    | <approximate numeric type>

<exact numeric type> ::=
      NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
    | DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
    | DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
    | INTEGER
    | INT
    | SMALLINT

<precision> ::= <unsigned integer>

<scale> ::= <unsigned integer>

<approximate numeric type> ::=
      FLOAT [ <left paren> <precision> <right paren> ]
    | REAL
    | DOUBLE PRECISION

<datetime type> ::=
      DATE
    | TIME [ <left paren> <time precision> <right paren> ]
          [ WITH TIME ZONE ]
    | TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
          [ WITH TIME ZONE ]

<time precision> ::= <time fractional seconds precision>

<time fractional seconds precision> ::= <unsigned integer>

<timestamp precision> ::= <time fractional seconds precision>

<interval type> ::= INTERVAL <interval qualifier>

<interval qualifier> ::=
      <start field> TO <end field>
    | <single datetime field>

<start field> ::=
    <non-second datetime field>
        [ <left paren> <interval leading field precision> <right paren> ]

<non-second datetime field> ::= YEAR | MONTH | DAY | HOUR
    | MINUTE

<interval leading field precision> ::= <unsigned integer>

<end field> ::=
      <non-second datetime field>
    | SECOND [ <left paren> <interval fractional seconds precision> <right pare
n> ]

<interval fractional seconds precision> ::= <unsigned integer>

<single datetime field> ::=
      <non-second datetime field>
          [ <left paren> <interval leading field precision> <right paren> ]
    | SECOND [ <left paren> <interval leading field precision>
          [ <comma> <interval fractional seconds precision> ] <right paren> ]

<domain name> ::= <qualified name>

<qualified name> ::=
    [ <schema name> <period> ] <qualified identifier>

<default clause> ::=
      DEFAULT <default option>

<default option> ::=
      <literal>
    | <datetime value function>
    | USER
    | CURRENT_USER
    | SESSION_USER
    | SYSTEM_USER
    | NULL

<literal> ::=
      <signed numeric literal>
    | <general literal>

<signed numeric literal> ::=
    [ <sign> ] <unsigned numeric literal>

<general literal> ::=
      <character string literal>
    | <national character string literal>
    | <bit string literal>
    | <hex string literal>
    | <datetime literal>
    | <interval literal>

<datetime literal> ::=
      <date literal>
    | <time literal>
    | <timestamp literal>

<date literal> ::=
    DATE <date string>

<time literal> ::=
    TIME <time string>

<timestamp literal> ::=
    TIMESTAMP <timestamp string>

<interval literal> ::=
    INTERVAL [ <sign> ] <interval string> <interval qualifier>

<datetime value function> ::=
      <current date value function>
    | <current time value function>
    | <current timestamp value function>

<current date value function> ::= CURRENT_DATE

<current time value function> ::=
      CURRENT_TIME [ <left paren> <time precision> <right paren> ]

<current timestamp value function> ::=
      CURRENT_TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]

<column constraint definition> ::=
    [ <constraint name definition> ]
    <column constraint>
      [ <constraint attributes> ]

<constraint name definition> ::= CONSTRAINT <constraint name>

<constraint name> ::= <qualified name>

<column constraint> ::=
      NOT NULL
    | <unique specification>
    | <references specification>
    | <check constraint definition>

<unique specification> ::=
    UNIQUE | PRIMARY KEY

<references specification> ::=
    REFERENCES <referenced table and columns>
      [ MATCH <match type> ]
      [ <referential triggered action> ]

<referenced table and columns> ::=
     <table name> [ <left paren> <reference column list> <right paren> ]

<table name> ::=
      <qualified name>
    | <qualified local table name>

<reference column list> ::= <column name list>

<column name list> ::=
    <column name> [ ( <comma> <column name> )... ]

<match type> ::=
      FULL
    | PARTIAL

<referential triggered action> ::=
      <update rule> [ <delete rule> ]
    | <delete rule> [ <update rule> ]

<update rule> ::= ON UPDATE <referential action>

<referential action> ::=
      CASCADE
    | SET NULL
    | SET DEFAULT
    | NO ACTION

<delete rule> ::= ON DELETE <referential action>

<check constraint definition> ::=
    CHECK
        <left paren> <search condition> <right paren>

<search condition> ::=
      <boolean term>
    | <search condition> OR <boolean term>

<boolean term> ::=
      <boolean factor>
    | <boolean term> AND <boolean factor>

<boolean factor> ::=
    [ NOT ] <boolean test>

<boolean test> ::=
    <boolean primary> [ IS [ NOT ]
          <truth value> ]

<boolean primary> ::=
      <predicate>
    | <left paren> <search condition> <right paren>

<predicate> ::=
      <comparison predicate>
    | <between predicate>
    | <in predicate>
    | <like predicate>
    | <null predicate>
    | <quantified comparison predicate>
    | <exists predicate>
    | <unique predicate>
    | <match predicate>
    | <overlaps predicate>

<comparison predicate> ::=
    <row value constructor> <comp op>
        <row value constructor>

<row value constructor> ::=
       <row value constructor element>
    | <left paren> <row value constructor list> <right paren>
    | <row subquery>

<row value constructor element> ::=
      <value expression>
    | <null specification>
    | <default specification>

<value expression> ::=
      <numeric value expression>
    | <string value expression>
    | <datetime value expression>
    | <interval value expression>

<numeric value expression> ::=
      <term>
    | <numeric value expression> <plus sign> <term>
    | <numeric value expression> <minus sign> <term>

<term> ::=
      <factor>
    | <term> <asterisk> <factor>
    | <term> <solidus> <factor>

<factor> ::=
    [ <sign> ] <numeric primary>

<numeric primary> ::=
      <value expression primary>
    | <numeric value function>

<value expression primary> ::=
      <unsigned value specification>
    | <column reference>
    | <set function specification>
    | <scalar subquery>
    | <case expression>
    | <left paren> <value expression> <right paren>
    | <cast specification>

<unsigned value specification> ::=
      <unsigned literal>
    | <general value specification>

<unsigned literal> ::=
      <unsigned numeric literal>
    | <general literal>

<general value specification> ::=
      <parameter specification>
    | <dynamic parameter specification>
    | <variable specification>
    | USER
    | CURRENT_USER
    | SESSION_USER
    | SYSTEM_USER
    | VALUE

<parameter specification> ::=
    <parameter name> [ <indicator parameter> ]

<parameter name> ::= <colon> <identifier>

<indicator parameter> ::=
    [ INDICATOR ] <parameter name>

<dynamic parameter specification> ::= <question mark>

<variable specification> ::=
    <embedded variable name> [ <indicator variable> ]

<embedded variable name> ::=
    <colon><host identifier>

<host identifier> ::=
      <Ada host identifier>
    | <C host identifier>
    | <COBOL host identifier>
    | <Fortran host identifier>
    | <MUMPS host identifier>
    | <Pascal host identifier>
    | <PL/I host identifier>

<Ada host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)

<C host identifier> ::=
    !! <EMPHASIS>(See the Syntax Rules.)

<COBOL host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)

<Fortran host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)

<MUMPS host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)

<Pascal host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)

<PL/I host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)

<indicator variable> ::=
    [ INDICATOR ] <embedded variable name>

<column reference> ::= [ <qualifier> <period> ] <column name>

<qualifier> ::=
      <table name>
    | <correlation name>

<correlation name> ::= <identifier>

<set function specification> ::=
      COUNT <left paren> <asterisk> <right paren>
    | <general set function>

<general set function> ::=
      <set function type>
          <left paren> [ <set quantifier> ] <value expression> <right paren>

<set function type> ::=
    AVG | MAX | MIN | SUM | COUNT

<set quantifier> ::= DISTINCT | ALL

<scalar subquery> ::= <subquery>

<subquery> ::= <left paren> <query expression> <right paren>

<query expression> ::=
      <non-join query expression>
    | <joined table>

<non-join query expression> ::=
      <non-join query term>
    | <query expression> UNION  [ ALL ]
          [ <corresponding spec> ] <query term>
    | <query expression> EXCEPT [ ALL ]
          [ <corresponding spec> ] <query term>

<non-join query term> ::=
      <non-join query primary>
    | <query term> INTERSECT [ ALL ]
          [ <corresponding spec> ] <query primary>

<non-join query primary> ::=
      <simple table>
    | <left paren> <non-join query expression> <right paren>

<simple table> ::=
      <query specification>
    | <table value constructor>
    | <explicit table>

<query specification> ::=
    SELECT [ <set quantifier> ] <select list> <table expression>

<select list> ::=
      <asterisk>
    | <select sublist> [ ( <comma> <select sublist> )... ]

<select sublist> ::=
      <derived column>
    | <qualifier> <period> <asterisk>

<derived column> ::= <value expression> [ <as clause> ]

<as clause> ::= [ AS ] <column name>

<table expression> ::=
    <from clause>
    [ <where clause> ]
    [ <group by clause> ]
    [ <having clause> ]

<from clause> ::= FROM <table reference>
    [ ( <comma> <table reference> )... ]

<table reference> ::=
      <table name> [ [ AS ] <correlation name>
          [ <left paren> <derived column list> <right paren> ] ]
    | <derived table> [ AS ] <correlation name>
          [ <left paren> <derived column list> <right paren> ]
    | <joined table>

<derived column list> ::= <column name list>

<derived table> ::= <table subquery>

<table subquery> ::= <subquery>

<joined table> ::=
      <cross join>
    | <qualified join>
    | <left paren> <joined table> <right paren>

<cross join> ::=
    <table reference> CROSS JOIN <table reference>

<qualified join> ::=
    <table reference> [ NATURAL ] [ <join type> ] JOIN
      <table reference> [ <join specification> ]

<join type> ::=
      INNER
    | <outer join type> [ OUTER ]
    | UNION

<outer join type> ::=
      LEFT
    | RIGHT
    | FULL

<join specification> ::=
      <join condition>
    | <named columns join>

<join condition> ::= ON <search condition>

<named columns join> ::=
    USING <left paren> <join column list> <right paren>

<join column list> ::= <column name list>

<where clause> ::= WHERE <search condition>

<group by clause> ::=
    GROUP BY <grouping column reference list>

<grouping column reference list> ::=
    <grouping column reference>
        [ ( <comma> <grouping column reference> )... ]

<grouping column reference> ::=
    <column reference> [ <collate clause> ]

<collate clause> ::= COLLATE <collation name>

<collation name> ::= <qualified name>

<having clause> ::= HAVING <search condition>

<table value constructor> ::=
    VALUES <table value constructor list>

<table value constructor list> ::=
    <row value constructor> [ ( <comma> <row value constructor> )... ]

<explicit table> ::= TABLE <table name>

<query term> ::=
      <non-join query term>
    | <joined table>

<corresponding spec> ::=
    CORRESPONDING [ BY <left paren> <corresponding column list> <right paren> ]

<corresponding column list> ::= <column name list>

<query primary> ::=
      <non-join query primary>
    | <joined table>

<case expression> ::=
      <case abbreviation>
    | <case specification>

<case abbreviation> ::=
      NULLIF <left paren> <value expression> <comma>
            <value expression> <right paren>
    | COALESCE <left paren> <value expression>
            ( <comma> <value expression> )... <right paren>

<case specification> ::=
      <simple case>
    | <searched case>

<simple case> ::=
    CASE <case operand>
      <simple when clause>...
      [ <else clause> ]
    END

<case operand> ::= <value expression>

<simple when clause> ::= WHEN <when operand> THEN <result>

<when operand> ::= <value expression>

<result> ::= <result expression> | NULL

<result expression> ::= <value expression>

<else clause> ::= ELSE <result>

<searched case> ::=
    CASE
      <searched when clause>...
      [ <else clause> ]
    END

<searched when clause> ::= WHEN <search condition> THEN <result>

<cast specification> ::=
    CAST <left paren> <cast operand> AS
        <cast target> <right paren>

<cast operand> ::=
      <value expression>
    | NULL

<cast target> ::=
      <domain name>
    | <data type>

<numeric value function> ::=
      <position expression>
    | <extract expression>
    | <length expression>

<position expression> ::=
    POSITION <left paren> <character value expression>
        IN <character value expression> <right paren>

<character value expression> ::=
      <concatenation>
    | <character factor>

<concatenation> ::=
    <character value expression> <concatenation operator>
        <character factor>

<character factor> ::=
    <character primary> [ <collate clause> ]

<character primary> ::=
      <value expression primary>
    | <string value function>

<string value function> ::=
      <character value function>
    | <bit value function>

<character value function> ::=
      <character substring function>
    | <fold>
    | <form-of-use conversion>
    | <character translation>
    | <trim function>

<character substring function> ::=
    SUBSTRING <left paren> <character value expression> FROM <start position>
                [ FOR <string length> ] <right paren>

<start position> ::= <numeric value expression>

<string length> ::= <numeric value expression>

<fold> ::= ( UPPER | LOWER )
     <left paren> <character value expression> <right paren>

<form-of-use conversion> ::=
    CONVERT <left paren> <character value expression>
        USING <form-of-use conversion name> <right paren>

<form-of-use conversion name> ::= <qualified name>

<character translation> ::=
    TRANSLATE <left paren> <character value expression>
        USING <translation name> <right paren>

<translation name> ::= <qualified name>

<trim function> ::=
    TRIM <left paren> <trim operands> <right paren>

<trim operands> ::=
    [ [ <trim specification> ] [ <trim character> ] FROM ] <trim source>

<trim specification> ::=
      LEADING
    | TRAILING
    | BOTH

<trim character> ::= <character value expression>

<trim source> ::= <character value expression>

<bit value function> ::=
    <bit substring function>

<bit substring function> ::=
    SUBSTRING <left paren> <bit value expression> FROM <start position>
        [ FOR <string length> ] <right paren>

<bit value expression> ::=
      <bit concatenation>
    | <bit factor>

<bit concatenation> ::=
    <bit value expression> <concatenation operator> <bit factor>

<bit factor> ::= <bit primary>

<bit primary> ::=
      <value expression primary>
    | <string value function>

<extract expression> ::=
    EXTRACT <left paren> <extract field>
        FROM <extract source> <right paren>

<extract field> ::=
      <datetime field>
    | <time zone field>

<datetime field> ::=
      <non-second datetime field>
    | SECOND

<time zone field> ::=
      TIMEZONE_HOUR
    | TIMEZONE_MINUTE

<extract source> ::=
      <datetime value expression>
    | <interval value expression>

<datetime value expression> ::=
      <datetime term>
    | <interval value expression> <plus sign> <datetime term>
    | <datetime value expression> <plus sign> <interval term>
    | <datetime value expression> <minus sign> <interval term>

<interval term> ::=
      <interval factor>
    | <interval term 2> <asterisk> <factor>
    | <interval term 2> <solidus> <factor>
    | <term> <asterisk> <interval factor>

<interval factor> ::=
    [ <sign> ] <interval primary>

<interval primary> ::=
      <value expression primary> [ <interval qualifier> ]

<interval term 2> ::= <interval term>

<interval value expression> ::=
      <interval term>
    | <interval value expression 1> <plus sign> <interval term 1>
    | <interval value expression 1> <minus sign> <interval term 1>
    | <left paren> <datetime value expression> <minus sign>
          <datetime term> <right paren> <interval qualifier>

<interval value expression 1> ::= <interval value expression>

<interval term 1> ::= <interval term>

<datetime term> ::=
      <datetime factor>

<datetime factor> ::=
      <datetime primary> [ <time zone> ]

<datetime primary> ::=
      <value expression primary>
    | <datetime value function>

<time zone> ::=
    AT <time zone specifier>

<time zone specifier> ::=
      LOCAL
    | TIME ZONE <interval value expression>

<length expression> ::=
      <char length expression>
    | <octet length expression>
    | <bit length expression>

<char length expression> ::=
    ( CHAR_LENGTH | CHARACTER_LENGTH )
        <left paren> <string value expression> <right paren>

<string value expression> ::=
      <character value expression>
    | <bit value expression>

<octet length expression> ::=
    OCTET_LENGTH <left paren> <string value expression> <right paren>

<bit length expression> ::=
    BIT_LENGTH <left paren> <string value expression> <right paren>

<null specification> ::=
    NULL

<default specification> ::=
    DEFAULT

<row value constructor list> ::=
    <row value constructor element>
        [ ( <comma> <row value constructor element> )... ]

<row subquery> ::= <subquery>

<comp op> ::=
      <equals operator>
    | <not equals operator>
    | <less than operator>
    | <greater than operator>
    | <less than or equals operator>
    | <greater than or equals operator>

<between predicate> ::=
    <row value constructor> [ NOT ] BETWEEN
      <row value constructor> AND <row value constructor>

<in predicate> ::=
    <row value constructor>
      [ NOT ] IN <in predicate value>

<in predicate value> ::=
      <table subquery>
    | <left paren> <in value list> <right paren>

<in value list> ::=
    <value expression> ( <comma> <value expression> )...

<like predicate> ::=
    <match value> [ NOT ] LIKE <pattern>
      [ ESCAPE <escape character> ]

<match value> ::= <character value expression>

<pattern> ::= <character value expression>

<escape character> ::= <character value expression>

<null predicate> ::= <row value constructor>
    IS [ NOT ] NULL

<quantified comparison predicate> ::=
    <row value constructor> <comp op> <quantifier> <table subquery>

<quantifier> ::= <all> | <some>

<all> ::= ALL

<some> ::= SOME | ANY

<exists predicate> ::= EXISTS <table subquery>

<unique predicate> ::= UNIQUE <table subquery>

<match predicate> ::=
    <row value constructor> MATCH [ UNIQUE ]
        [ PARTIAL | FULL ] <table subquery>

<overlaps predicate> ::=
    <row value constructor 1> OVERLAPS <row value constructor 2>

<row value constructor 1> ::= <row value constructor>

<row value constructor 2> ::= <row value constructor>

<truth value> ::=
      TRUE
    | FALSE
    | UNKNOWN

<constraint attributes> ::=
      <constraint check time> [ [ NOT ] DEFERRABLE ]
    | [ NOT ] DEFERRABLE [ <constraint check time> ]

<constraint check time> ::=
      INITIALLY DEFERRED
    | INITIALLY IMMEDIATE

<table constraint definition> ::=
    [ <constraint name definition> ]
    <table constraint> [ <constraint attributes> ]

<table constraint> ::=
      <unique constraint definition>
    | <referential constraint definition>
    | <check constraint definition>

<unique constraint definition> ::=
            <unique specification> even in SQL3)
    <unique specification>
      <left paren> <unique column list> <right paren>

<unique column list> ::= <column name list>

<referential constraint definition> ::=
    FOREIGN KEY
        <left paren> <referencing columns> <right paren>
      <references specification>

<referencing columns> ::=
    <reference column list>

<module contents> ::=
      <declare cursor>
    | <dynamic declare cursor>
    | <procedure>

<declare cursor> ::=
    DECLARE <cursor name> [ INSENSITIVE ] [ SCROLL ] CURSOR
      FOR <cursor specification>

<cursor name> ::= <identifier>

<cursor specification> ::=
    <query expression> [ <order by clause> ]
      [ <updatability clause> ]

<order by clause> ::=
    ORDER BY <sort specification list>

<sort specification list> ::=
    <sort specification> [ ( <comma> <sort specification> )... ]

<sort specification> ::=
    <sort key> [ <collate clause> ] [ <ordering specification> ]

<sort key> ::=
      <column name>
    | <unsigned integer>

<ordering specification> ::= ASC | DESC

<updatability clause> ::=
    FOR
        ( READ ONLY |
          UPDATE [ OF <column name list> ] )

<dynamic declare cursor> ::=
    DECLARE <cursor name> [ INSENSITIVE ] [ SCROLL ] CURSOR
        FOR <statement name>

<statement name> ::= <identifier>

<procedure> ::=
    PROCEDURE <procedure name>
        <parameter declaration list> <semicolon>
      <SQL procedure statement> <semicolon>

<procedure name> ::= <identifier>

<parameter declaration list> ::=
      <left paren> <parameter declaration>
          [ ( <comma> <parameter declaration> )... ] <right paren>
    | <parameter declaration>...

<parameter declaration> ::=
      <parameter name> <data type>
    | <status parameter>

<status parameter> ::=
    SQLCODE | SQLSTATE

<SQL procedure statement> ::=
      <SQL schema statement>
    | <SQL data statement>
    | <SQL transaction statement>
    | <SQL connection statement>
    | <SQL session statement>
    | <SQL dynamic statement>
    | <SQL diagnostics statement>

<SQL schema statement> ::=
      <SQL schema definition statement>
    | <SQL schema manipulation statement>

<SQL schema definition statement> ::=
      <schema definition>
    | <table definition>
    | <view definition>
    | <grant statement>
    | <domain definition>
    | <character set definition>
    | <collation definition>
    | <translation definition>
    | <assertion definition>

<schema definition> ::=
    CREATE SCHEMA <schema name clause>
      [ <schema character set specification> ]
      [ <schema element>... ]

<schema name clause> ::=
      <schema name>
    | AUTHORIZATION <schema authorization identifier>
    | <schema name> AUTHORIZATION
          <schema authorization identifier>

<schema authorization identifier> ::=
    <authorization identifier>

<schema character set specification> ::=
    DEFAULT CHARACTER
        SET <character set specification>

<schema element> ::=
      <domain definition>
    | <table definition>
    | <view definition>
    | <grant statement>
    | <assertion definition>
    | <character set definition>
    | <collation definition>
    | <translation definition>

<domain definition> ::=
    CREATE DOMAIN <domain name>
        [ AS ] <data type>
      [ <default clause> ]
      [ <domain constraint>... ]
      [ <collate clause> ]

<domain constraint> ::=
    [ <constraint name definition> ]
    <check constraint definition> [ <constraint attributes> ]

<table definition> ::=
    CREATE [ ( GLOBAL | LOCAL ) TEMPORARY ] TABLE
        <table name>
      <table element list>
      [ ON COMMIT ( DELETE | PRESERVE ) ROWS ]

<view definition> ::=
    CREATE VIEW <table name> [ <left paren> <view column list>
                                  <right paren> ]
      AS <query expression>
      [ WITH [ <levels clause> ] CHECK OPTION ]

<view column list> ::= <column name list>

<levels clause> ::=
    CASCADED | LOCAL

<grant statement> ::=
   GRANT <privileges> ON <object name>
     TO <grantee> [ ( <comma> <grantee> )... ]
       [ WITH GRANT OPTION ]

<privileges> ::=
      ALL PRIVILEGES
    | <action list>

<action list> ::= <action> [ ( <comma> <action> )... ]

<action> ::=
      SELECT
    | DELETE
    | INSERT [ <left paren> <privilege column list> <right paren> ]
    | UPDATE [ <left paren> <privilege column list> <right paren> ]
    | REFERENCES [ <left paren> <privilege column list> <right paren> ]
    | USAGE

<privilege column list> ::= <column name list>

<object name> ::=
      [ TABLE ] <table name>
    | DOMAIN <domain name>
    | COLLATION <collation name>
    | CHARACTER SET <character set name>
    | TRANSLATION <translation name>

<grantee> ::=
      PUBLIC
    | <authorization identifier>

<assertion definition> ::=
    CREATE ASSERTION <constraint name> <assertion check>
      [ <constraint attributes> ]

<assertion check> ::=
    CHECK
        <left paren> <search condition> <right paren>

<character set definition> ::=
    CREATE CHARACTER SET <character set name>
        [ AS ]
      <character set source>
      [ <collate clause> | <limited collation definition> ]

<character set source> ::=
      GET <existing character set name>

<existing character set name> ::=
      <standard character repertoire name>
    | <implementation-defined character repertoire name>
    | <schema character set name>

<schema character set name> ::= <character set name>

<limited collation definition> ::=
    COLLATION FROM <collation source>

<collation source> ::=
      <collating sequence definition>
    | <translation collation>

<collating sequence definition> ::=
      <external collation>
    | <schema collation name>
    | DESC <left paren> <collation name> <right paren>
    | DEFAULT

<external collation> ::=
    EXTERNAL <left paren> <quote> <external collation name> <quote> <right pare
n>

<external collation name> ::=
      <standard collation name>
    | <implementation-defined collation name>

<standard collation name> ::= <collation name>

<implementation-defined collation name> ::= <collation name>

<schema collation name> ::= <collation name>

<translation collation> ::=
    TRANSLATION <translation name>
        [ THEN COLLATION <collation name> ]

<collation definition> ::=
    CREATE COLLATION <collation name> FOR
        <character set specification>
      FROM <collation source>
        [ <pad attribute> ]

<pad attribute> ::=
      NO PAD
    | PAD SPACE

<translation definition> ::=
    CREATE TRANSLATION <translation name>
      FOR <source character set specification>
        TO <target character set specification>
      FROM <translation source>

<source character set specification> ::= <character set specification>

<target character set specification> ::= <character set specification>

<translation source> ::=
      <translation specification>

<translation specification> ::=
      <external translation>
    | IDENTITY
    | <schema translation name>

<external translation> ::=
    EXTERNAL <left paren> <quote> <external translation name> <quote> <right pa
ren>

<external translation name> ::=
      <standard translation name>
    | <implementation-defined translation name>

<standard translation name> ::= <translation name>

<implementation-defined translation name> ::= <translation name>

<schema translation name> ::= <translation name>

<SQL schema manipulation statement> ::=
      <drop schema statement>
    | <alter table statement>
    | <drop table statement>
    | <drop view statement>
    | <revoke statement>
    | <alter domain statement>
    | <drop domain statement>
    | <drop character set statement>
    | <drop collation statement>
    | <drop translation statement>
    | <drop assertion statement>

<drop schema statement> ::=
    DROP SCHEMA <schema name> <drop behavior>

<drop behavior> ::= CASCADE | RESTRICT

<alter table statement> ::=
    ALTER TABLE <table name> <alter table action>

<alter table action> ::=
      <add column definition>
    | <alter column definition>
    | <drop column definition>
    | <add table constraint definition>
    | <drop table constraint definition>

<add column definition> ::=
    ADD [ COLUMN ] <column definition>

<alter column definition> ::=
    ALTER [ COLUMN ] <column name> <alter column action>

<alter column action> ::=
      <set column default clause>
    | <drop column default clause>

<set column default clause> ::=
    SET <default clause>

<drop column default clause> ::=
    DROP DEFAULT

<drop column definition> ::=
    DROP [ COLUMN ] <column name> <drop behavior>

<add table constraint definition> ::=
    ADD <table constraint definition>

<drop table constraint definition> ::=
    DROP CONSTRAINT <constraint name> <drop behavior>

<drop table statement> ::=
    DROP TABLE <table name> <drop behavior>

<drop view statement> ::=
    DROP VIEW <table name> <drop behavior>

<revoke statement> ::=
    REVOKE [ GRANT OPTION FOR ]
        <privileges>
        ON <object name>
      FROM <grantee> [ ( <comma> <grantee> )... ] <drop behavior>

<alter domain statement> ::=
    ALTER DOMAIN <domain name> <alter domain action>

<alter domain action> ::=
      <set domain default clause>
    | <drop domain default clause>
    | <add domain constraint definition>
    | <drop domain constraint definition>

<set domain default clause> ::= SET <default clause>

<drop domain default clause> ::= DROP DEFAULT

<add domain constraint definition> ::=
    ADD <domain constraint>

<drop domain constraint definition> ::=
    DROP CONSTRAINT <constraint name>

<drop domain statement> ::=
    DROP DOMAIN <domain name> <drop behavior>

<drop character set statement> ::=
    DROP CHARACTER SET <character set name>

<drop collation statement> ::=
    DROP COLLATION <collation name>

<drop translation statement> ::=
    DROP TRANSLATION <translation name>

<drop assertion statement> ::=
    DROP ASSERTION <constraint name>

<SQL data statement> ::=
      <open statement>
    | <fetch statement>
    | <close statement>
    | <select statement: single row>
    | <SQL data change statement>

<open statement> ::=
    OPEN <cursor name>

<fetch statement> ::=
    FETCH [ [ <fetch orientation> ] FROM ]
      <cursor name> INTO <fetch target list>

<fetch orientation> ::=
      NEXT
    | PRIOR
    | FIRST
    | LAST
    | ( ABSOLUTE | RELATIVE ) <simple value specification>

<simple value specification> ::=
      <parameter name>
    | <embedded variable name>
    | <literal>

<fetch target list> ::=
    <target specification> [ ( <comma> <target specification> )... ]

<target specification> ::=
      <parameter specification>
    | <variable specification>

<close statement> ::=
    CLOSE <cursor name>

<select statement: single row> ::=
    SELECT [ <set quantifier> ] <select list>
      INTO <select target list>
        <table expression>

<select target list> ::=
    <target specification> [ ( <comma> <target specification> )... ]

<SQL data change statement> ::=
      <delete statement: positioned>
    | <delete statement: searched>
    | <insert statement>
    | <update statement: positioned>
    | <update statement: searched>

<delete statement: positioned> ::=
    DELETE FROM <table name>
      WHERE CURRENT OF <cursor name>

<delete statement: searched> ::=
    DELETE FROM <table name>
      [ WHERE <search condition> ]

<insert statement> ::=
    INSERT INTO <table name>
      <insert columns and source>

<insert columns and source> ::=
      [ <left paren> <insert column list> <right paren> ]
            <query expression>
    | DEFAULT VALUES

<insert column list> ::= <column name list>

<update statement: positioned> ::=
    UPDATE <table name>
      SET <set clause list>
        WHERE CURRENT OF <cursor name>

<set clause list> ::=
    <set clause> [ ( <comma> <set clause> )... ]

<set clause> ::=
    <object column> <equals operator> <update source>

<object column> ::= <column name>

<update source> ::=
      <value expression>
    | <null specification>
    | DEFAULT

<update statement: searched> ::=
    UPDATE <table name>
      SET <set clause list>
      [ WHERE <search condition> ]

<SQL transaction statement> ::=
      <set transaction statement>
    | <set constraints mode statement>
    | <commit statement>
    | <rollback statement>

<set transaction statement> ::=
    SET TRANSACTION <transaction mode>
        [ ( <comma> <transaction mode> )... ]

<transaction mode> ::=
      <isolation level>
    | <transaction access mode>
    | <diagnostics size>

<isolation level> ::=
    ISOLATION LEVEL <level of isolation>

<level of isolation> ::=
      READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ
    | SERIALIZABLE

<transaction access mode> ::=
      READ ONLY
    | READ WRITE

<diagnostics size> ::=
    DIAGNOSTICS SIZE <number of conditions>

<number of conditions> ::= <simple value specification>

<set constraints mode statement> ::=
    SET CONSTRAINTS <constraint name list>
        ( DEFERRED | IMMEDIATE )

<constraint name list> ::=
      ALL
    | <constraint name> [ ( <comma> <constraint name> )... ]

<commit statement> ::=
    COMMIT [ WORK ]

<rollback statement> ::=
    ROLLBACK [ WORK ]

<SQL connection statement> ::=
      <connect statement>
    | <set connection statement>
    | <disconnect statement>

<connect statement> ::=
    CONNECT TO <connection target>

<connection target> ::=
      <SQL-server name>
        [ AS <connection name> ]
          correspondence with Tony Gordon)
        [ USER <user name> ]
    | DEFAULT

<SQL-server name> ::= <simple value specification>

<connection name> ::= <simple value specification>

<user name> ::= <simple value specification>

<set connection statement> ::=
    SET CONNECTION <connection object>

<connection object> ::=
      DEFAULT
    | <connection name>

<disconnect statement> ::=
    DISCONNECT <disconnect object>

<disconnect object> ::=
      <connection object>
    | ALL
    | CURRENT

<SQL session statement> ::=
      <set catalog statement>
    | <set schema statement>
    | <set names statement>
    | <set session authorization identifier statement>
    | <set local time zone statement>

<set catalog statement> ::=
    SET CATALOG <value specification>

<value specification> ::=
      <literal>
    | <general value specification>

<set schema statement> ::=
    SET SCHEMA <value specification>

<set names statement> ::=
    SET NAMES <value specification>

<set session authorization identifier statement> ::=
    SET SESSION AUTHORIZATION
        <value specification>

<set local time zone statement> ::=
    SET TIME ZONE
        <set time zone value>

<set time zone value> ::=
      <interval value expression>
    | LOCAL

<SQL dynamic statement> ::=
      <system descriptor statement>
    | <prepare statement>
    | <deallocate prepared statement>
    | <describe statement>
    | <execute statement>
    | <execute immediate statement>
    | <SQL dynamic data statement>

<system descriptor statement> ::=
      <allocate descriptor statement>
    | <deallocate descriptor statement>
    | <set descriptor statement>
    | <get descriptor statement>

<allocate descriptor statement> ::=
    ALLOCATE DESCRIPTOR <descriptor name>
       [ WITH MAX <occurrences> ]

<descriptor name> ::=
    [ <scope option> ] <simple value specification>

<scope option> ::=
      GLOBAL
    | LOCAL

<occurrences> ::= <simple value specification>

<deallocate descriptor statement> ::=
    DEALLOCATE DESCRIPTOR <descriptor name>

<set descriptor statement> ::=
    SET DESCRIPTOR <descriptor name>
        <set descriptor information>

<set descriptor information> ::=
      <set count>
    | VALUE <item number>
        <set item information> [ ( <comma> <set item information> )... ]

<set count> ::=
    COUNT <equals operator> <simple value specification 1>

<simple value specification 1> ::= <simple value specification>

<item number> ::= <simple value specification>

<set item information> ::=
    <descriptor item name> <equals operator> <simple value specification 2>

<descriptor item name> ::=
      TYPE
    | LENGTH
    | OCTET_LENGTH
    | RETURNED_LENGTH
    | RETURNED_OCTET_LENGTH
    | PRECISION
    | SCALE
    | DATETIME_INTERVAL_CODE
    | DATETIME_INTERVAL_PRECISION
    | NULLABLE
    | INDICATOR
    | DATA
    | NAME
    | UNNAMED
    | COLLATION_CATALOG
    | COLLATION_SCHEMA
    | COLLATION_NAME
    | CHARACTER_SET_CATALOG
    | CHARACTER_SET_SCHEMA
    | CHARACTER_SET_NAME

<simple value specification 2> ::= <simple value specification>

<item number> ::= <simple value specification>

<get descriptor statement> ::=
    GET DESCRIPTOR <descriptor name> <get descriptor information>

<get descriptor information> ::=
      <get count>
    | VALUE <item number>
        <get item information> [ ( <comma> <get item information> )... ]

<get count> ::=
    <simple target specification 1> <equals operator>
         COUNT

<simple target specification 1> ::= <simple target specification>

<simple target specification> ::=
      <parameter name>
    | <embedded variable name>

<get item information> ::=
    <simple target specification 2> <equals operator> <descriptor item name>>

<simple target specification 2> ::= <simple target specification>

<prepare statement> ::=
    PREPARE <SQL statement name> FROM <SQL statement variable>

<SQL statement name> ::=
      <statement name>
    | <extended statement name>

<extended statement name> ::=
    [ <scope option> ] <simple value specification>

<SQL statement variable> ::= <simple value specification>

<deallocate prepared statement> ::=
    DEALLOCATE PREPARE <SQL statement name>

<describe statement> ::=
      <describe input statement>
    | <describe output statement>

<describe input statement> ::=
    DESCRIBE INPUT <SQL statement name> <using descriptor>

<using descriptor> ::=
    ( USING | INTO ) SQL DESCRIPTOR <descriptor name>

<describe output statement> ::=
    DESCRIBE [ OUTPUT ] <SQL statement name> <using descriptor>

<execute statement> ::=
    EXECUTE <SQL statement name>
      [ <result using clause> ]
      [ <parameter using clause> ]

<result using clause> ::= <using clause>

<using clause> ::=
      <using arguments>
    | <using descriptor>

<using arguments> ::=
    ( USING | INTO ) <argument> [ ( <comma> <argument> )... ]

<argument> ::= <target specification>

<parameter using clause> ::= <using clause>

<execute immediate statement> ::=
    EXECUTE IMMEDIATE <SQL statement variable>

<SQL dynamic data statement> ::=
      <allocate cursor statement>
    | <dynamic open statement>
    | <dynamic fetch statement>
    | <dynamic close statement>
    | <dynamic delete statement: positioned>
    | <dynamic update statement: positioned>

<allocate cursor statement> ::=
    ALLOCATE <extended cursor name> [ INSENSITIVE ]
        [ SCROLL ] CURSOR
      FOR <extended statement name>

<extended cursor name> ::=
    [ <scope option> ] <simple value specification>

<dynamic open statement> ::=
    OPEN <dynamic cursor name> [ <using clause> ]

<dynamic cursor name> ::=
      <cursor name>
    | <extended cursor name>

<dynamic fetch statement> ::=
    FETCH [ [ <fetch orientation> ] FROM ] <dynamic cursor name>
        <using clause>

<dynamic close statement> ::=
    CLOSE <dynamic cursor name>

<dynamic delete statement: positioned> ::=
    DELETE FROM <table name>
      WHERE CURRENT OF
          <dynamic cursor name>

<dynamic update statement: positioned> ::=
    UPDATE <table name>
      SET <set clause>
          [ ( <comma> <set clause> )... ]
        WHERE CURRENT OF
            <dynamic cursor name>

<SQL diagnostics statement> ::=
    <get diagnostics statement>

<get diagnostics statement> ::=
    GET DIAGNOSTICS <sql diagnostics information>

<sql diagnostics information> ::=
      <statement information>
    | <condition information>

<statement information> ::=
    <statement information item> [ ( <comma> <statement information item> )...
]

<statement information item> ::=
    <simple target specification> <equals operator> <statement information item
 name>

<statement information item name> ::=
      NUMBER
    | MORE
    | COMMAND_FUNCTION
    | DYNAMIC_FUNCTION
    | ROW_COUNT

<condition information> ::=
    EXCEPTION <condition number>
      <condition information item> [ ( <comma> <condition information item> )..
. ]

<condition number> ::= <simple value specification>

<condition information item> ::=
    <simple target specification> <equals operator> <condition information item
 name>

<condition information item name> ::=
      CONDITION_NUMBER
    | RETURNED_SQLSTATE
    | CLASS_ORIGIN
    | SUBCLASS_ORIGIN
    | SERVER_NAME
    | CONNECTION_NAME
    | CONSTRAINT_CATALOG
    | CONSTRAINT_SCHEMA
    | CONSTRAINT_NAME
    | CATALOG_NAME
    | SCHEMA_NAME
    | TABLE_NAME
    | COLUMN_NAME
    | CURSOR_NAME
    | MESSAGE_TEXT
    | MESSAGE_LENGTH
    | MESSAGE_OCTET_LENGTH

<embedded SQL host program> ::=
      <embedded SQL Ada program>
    | <embedded SQL C program>
    | <embedded SQL COBOL program>
    | <embedded SQL Fortran program>
    | <embedded SQL MUMPS program>
    | <embedded SQL Pascal program>
    | <embedded SQL PL/I program>

<embedded SQL Ada program> ::= !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL C program> ::=
      !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL COBOL program> ::= !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL Fortran program> ::=
    !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL MUMPS program> ::= !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL Pascal program> ::=
    !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL PL/I program> ::= !! <EMPHASIS>(See the Syntax Rules.)

<embedded SQL declare section> ::=
      <embedded SQL begin declare>
        [ <embedded character set declaration> ]
        [ <host variable definition>... ]
      <embedded SQL end declare>
    | <embedded SQL MUMPS declare>

<embedded SQL begin declare> ::=
    <SQL prefix> BEGIN DECLARE SECTION
        [ <SQL terminator> ]

<SQL prefix> ::=
      EXEC SQL
    | <ampersand>SQL<left paren>

<SQL terminator> ::=
      END-EXEC
    | <semicolon>
    | <right paren>

<embedded character set declaration> ::=
    SQL NAMES ARE <character set specification>

<host variable definition> ::=
      <Ada variable definition>
    | <C variable definition>
    | <COBOL variable definition>
    | <Fortran variable definition>
    | <MUMPS variable definition>
    | <Pascal variable definition>
    | <PL/I variable definition>

<Ada variable definition> ::=
    <Ada host identifier> [ ( <comma> <Ada host identifier> )... ] :
    <Ada type specification> [ <Ada initial value> ]

<Ada type specification> ::=
      <Ada qualified type specification>
    | <Ada unqualified type specification>

<Ada qualified type specification> ::=
      SQL_STANDARD.CHAR [ CHARACTER SET
         [ IS ] <character set specification> ]
          <left paren> 1 <double period> <length> <right paren>
    | SQL_STANDARD.BIT
          <left paren> 1 <double period> <length> <right paren>
    | SQL_STANDARD.SMALLINT
    | SQL_STANDARD.INT
    | SQL_STANDARD.REAL
    | SQL_STANDARD.DOUBLE_PRECISION
    | SQL_STANDARD.SQLCODE_TYPE
    | SQL_STANDARD.SQLSTATE_TYPE
    | SQL_STANDARD.INDICATOR_TYPE

<Ada unqualified type specification> ::=
      CHAR
          <left paren> 1 <double period> <length> <right paren>
    | BIT
          <left paren> 1 <double period> <length> <right paren>
    | SMALLINT
    | INT
    | REAL
    | DOUBLE_PRECISION
    | SQLCODE_TYPE
    | SQLSTATE_TYPE
    | INDICATOR_TYPE

<Ada initial value> ::=
    <Ada assignment operator> <character representation>...

<Ada assignment operator> ::= <colon><equals operator>

<C variable definition> ::=
      [ <C storage class> ]
      [ <C class modifier> ]
      <C variable specification>
    <semicolon>

<C storage class> ::=
      auto
    | extern
    | static

<C class modifier> ::= const | volatile

<C variable specification> ::=
      <C numeric variable>
    | <C character variable>
    | <C derived variable>

<C numeric variable> ::=
    ( long | short | float | double )
      <C host identifier> [ <C initial value> ]
            [ ( <comma> <C host identifier> [ <C initial value> ] )... ]

<C initial value> ::=
    <equals operator> <character representation>...

<C character variable> ::=
    char [ CHARACTER SET
             [ IS ] <character set specification> ]
      <C host identifier>
        <C array specification> [ <C initial value> ]
        [ ( <comma> <C host identifier>
          <C array specification>
                 [ <C initial value> ] )... ]

<C array specification> ::=
    <left bracket> <length> <right bracket>

<C derived variable> ::=
      <C VARCHAR variable>
    | <C bit variable>

<C VARCHAR variable> ::=
    VARCHAR [ CHARACTER SET [ IS ]
        <character set specification> ]
        <C host identifier>
            <C array specification> [ <C initial value> ]
          [ ( <comma> <C host identifier>
              <C array specification>
                      [ <C initial value> ] )... ]

<C bit variable> ::=
    BIT <C host identifier>
        <C array specification> [ <C initial value> ]
      [ ( <comma> <C host identifier>
        <C array specification>
                   [ <C initial value> ] )... ]

<COBOL variable definition> ::=
    (01|77) <COBOL host identifier> <COBOL type specification>
      [ <character representation>... ] <period>

<COBOL type specification> ::=
      <COBOL character type>
    | <COBOL bit type>
    | <COBOL numeric type>
    | <COBOL integer type>

<COBOL character type> ::=
    [ CHARACTER SET [ IS ]
          <character set specification> ]
    ( PIC | PICTURE ) [ IS ] ( X [ <left paren> <length> <right paren> ] )...

<COBOL bit type> ::=
    ( PIC | PICTURE ) [ IS ]
        ( B [ <left paren> <length> <right paren> ] )...

<COBOL numeric type> ::=
    ( PIC | PICTURE ) [ IS ]
      S <COBOL nines specification>
    [ USAGE [ IS ] ] DISPLAY SIGN LEADING SEPARATE

<COBOL nines specification> ::=
      <COBOL nines> [ V [ <COBOL nines> ] ]
    | V <COBOL nines>

<COBOL nines> ::= ( 9 [ <left paren> <length> <right paren> ] )...

<COBOL integer type> ::=
      <COBOL computational integer>
    | <COBOL binary integer>

<COBOL computational integer> ::=
    ( PIC | PICTURE ) [ IS ] S<COBOL nines>
      [ USAGE [ IS ] ] ( COMP | COMPUTATIONAL )

<COBOL binary integer> ::=
    ( PIC | PICTURE ) [ IS ] S<COBOL nines>
      [ USAGE [ IS ] ] BINARY

<Fortran variable definition> ::=
    <Fortran type specification>
    <Fortran host identifier>
        [ ( <comma> <Fortran host identifier> )... ]

<Fortran type specification> ::=
      CHARACTER [ <asterisk> <length> ]
          [ CHARACTER SET [ IS ]
                <character set specification> ]
    | BIT [ <asterisk> <length> ]
    | INTEGER
    | REAL
    | DOUBLE PRECISION

<MUMPS variable definition> ::=
    ( <MUMPS numeric variable> | <MUMPS character variable> )
        <semicolon>

<MUMPS numeric variable> ::=
    <MUMPS type specification>
      <MUMPS host identifier> [ ( <comma> <MUMPS host identifier> )... ]

<MUMPS type specification> ::=
      INT
    | DEC
          [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
    | REAL

<MUMPS character variable> ::=
    VARCHAR <MUMPS host identifier> <MUMPS length specification>
      [ ( <comma> <MUMPS host identifier> <MUMPS length specification> )... ]

<MUMPS length specification> ::=
    <left paren> <length> <right paren>

<Pascal variable definition> ::=
    <Pascal host identifier> [ ( <comma> <Pascal host identifier> )... ] <colon
>
      <Pascal type specification> <semicolon>

<Pascal type specification> ::=
      PACKED ARRAY
          <left bracket> 1 <double period> <length> <right bracket>
        OF CHAR
          [ CHARACTER SET [ IS ]
                <character set specification> ]
    | PACKED ARRAY
          <left bracket> 1 <double period> <length> <right bracket>
        OF BIT
    | INTEGER
    | REAL
    | CHAR [ CHARACTER SET
                                [ IS ] <character set specification> ]
    | BIT

<PL/I variable definition> ::=
    (DCL | DECLARE)
        (   <PL/I host identifier>
          | <left paren> <PL/I host identifier>
                [ ( <comma> <PL/I host identifier> )... ] <right paren> )
    <PL/I type specification>
    [ <character representation>... ] <semicolon>

<PL/I type specification> ::=
      ( CHAR | CHARACTER ) [ VARYING ]
          <left paren><length><right paren>
          [ CHARACTER SET
                [ IS ] <character set specification> ]
    | BIT [ VARYING ] <left paren><length><right paren>
    | <PL/I type fixed decimal> <left paren> <precision>
          [ <comma> <scale> ] <right paren>
    | <PL/I type fixed binary> [ <left paren> <precision> <right paren> ]
    | <PL/I type float binary> <left paren> <precision> <right paren>

<PL/I type fixed decimal> ::=
      ( DEC | DECIMAL ) FIXED
    | FIXED ( DEC | DECIMAL )

<PL/I type fixed binary> ::=
      ( BIN | BINARY ) FIXED
    | FIXED ( BIN | BINARY )

<PL/I type float binary> ::=
      ( BIN | BINARY ) FLOAT
    | FLOAT ( BIN | BINARY )

<embedded SQL end declare> ::=
    <SQL prefix> END DECLARE SECTION
        [ <SQL terminator> ]

<embedded SQL MUMPS declare> ::=
    <SQL prefix>
      BEGIN DECLARE SECTION
        [ <embedded character set declaration> ]
        [ <host variable definition>... ]
      END DECLARE SECTION
    <SQL terminator>

<embedded SQL statement> ::=
    <SQL prefix>
      <statement or declaration>
    [ <SQL terminator> ]

<statement or declaration> ::=
      <declare cursor>
    | <dynamic declare cursor>
    | <temporary table declaration>
    | <embedded exception declaration>
    | <SQL procedure statement>

<embedded exception declaration> ::=
    WHENEVER <condition> <condition action>

<condition> ::=
    SQLERROR | NOT FOUND

<condition action> ::=
    CONTINUE | <go to>

<go to> ::=
    ( GOTO | GO TO ) <goto target>

<goto target> ::=
      <host label identifier>
    | <unsigned integer>
    | <host PL/I label variable>

<host label identifier> ::= !!<EMPHASIS>(See the Syntax Rules.)

<host PL/I label variable> ::= !!<EMPHASIS>(See the Syntax Rules.)

<preparable statement> ::=
      <preparable SQL data statement>
    | <preparable SQL schema statement>
    | <preparable SQL transaction statement>
    | <preparable SQL session statement>
    | <preparable implementation-defined statement>

<preparable SQL data statement> ::=
      <delete statement: searched>
    | <dynamic single row select statement>
    | <insert statement>
    | <dynamic select statement>
    | <update statement: searched>
    | <preparable dynamic delete statement: positioned>
    | <preparable dynamic update statement: positioned>

<dynamic single row select statement> ::= <query specification>

<dynamic select statement> ::= <cursor specification>

<preparable dynamic delete statement: positioned> ::=
   DELETE [ FROM <table name> ]
      WHERE CURRENT OF <cursor name>

<preparable dynamic update statement: positioned> ::=
   UPDATE [ <table name> ]
      SET <set clause list>
      WHERE CURRENT OF <cursor name>

<preparable SQL schema statement> ::=
      <SQL schema statement>

<preparable SQL transaction statement> ::=
      <SQL transaction statement>

<preparable SQL session statement> ::=
      <SQL session statement>

<preparable implementation-defined statement> ::=
    !! <EMPHASIS>(See the Syntax Rules.)

<direct SQL statement> ::=
    <directly executable statement> <semicolon>

<directly executable statement> ::=
      <direct SQL data statement>
    | <SQL schema statement>
    | <SQL transaction statement>
    | <SQL connection statement>
    | <SQL session statement>
    | <direct implementation-defined statement>

<direct SQL data statement> ::=
      <delete statement: searched>
    | <direct select statement: multiple rows>
    | <insert statement>
    | <update statement: searched>
    | <temporary table declaration>

<direct select statement: multiple rows> ::=
    <query expression> [ <order by clause> ]

<direct implementation-defined statement> ::=
    !!<EMPHASIS>(See the Syntax Rules)

<SQL object identifier> ::=
    <SQL provenance> <SQL variant>

<SQL provenance> ::= <arc1> <arc2> <arc3>

<arc1> ::= iso | 1 | iso <left paren> 1 <right paren>

<arc2> ::= standard | 0 | standard <left paren> 0 <right paren>

<arc3> ::= 9075

<SQL variant> ::= <SQL edition> <SQL conformance>

<SQL edition> ::= <1987> | <1989> | <1992>

<1987> ::= 0 | edition1987 <left paren> 0 <right paren>

<1989> ::= <1989 base> <1989 package>

<1989 base> ::= 1 | edition1989 <left paren> 1 <right paren>

<1989 package> ::= <integrity no> | <integrity yes>

<integrity no> ::= 0 | IntegrityNo <left paren> 0 <right paren>

<integrity yes> ::= 1 | IntegrityYes <left paren> 1 <right paren>

<1992> ::= 2 | edition1992 <left paren> 2 <right paren>

<SQL conformance> ::= <low> | <intermediate> | <high>

<low> ::= 0 | Low <left paren> 0 <right paren>

<intermediate> ::= 1 | Intermediate <left paren> 1 <right paren>

<high> ::= 2 | High <left paren> 2 <right paren>

33. Appendice B - Tutoriel SQL  l'usage des dbutants

33.1 Didacticiel pour PostgreSQL

   Le didacticiel SQL est inclus dans la distribution de PostgreSQL. Les
   scripts du didacticiel SQL se trouvent dans le rpertoire src/tutorial

33.2 Pointeurs URL Internet

   On peut trouver le didacticiel SQL pour dbutants 
     * http://w3.one.net/~jhoffman/sqltut.htm

   Pour les commentaires ou suggestions, envoyer un courrier lectronique
   
     * jhoffman@one.net

   John Hoffman suggre de visiter les sites suivants :
     * Rfrence SQL http://www.contrib.andrew.cmu.edu/~shadow/sql.html
     * Demandez SQL Pro http://www.inquiry.com/techtips/thesqlpro/
     * Sites utiles pour les BD relationnelles SQL Pro
       http://www.inquiry.com/techtips/thesqlpro/usefulsites.html
     * Le site du programmeur http://infoweb.magi.com/~steve/develop.html
     * Sites http://info.itu.ch/special/wwwfiles Go here and see file
       comp_db.html
     * Ingrdients DB http://www.compapp.dcu.ie/databases/f017.html
     * Web Authoring http://www.stars.com/Tutorial/CGI/
     * Dictionnaire informatique
       http://wfn-shop.princeton.edu/cgi-bin/foldoc
     * DBMS Lab/Links http://www-ccs.cs.umass.edu/db.html
     * FAQ SQL http://epoch.CS.Berkeley.EDU:8000/sequoia/dba/montage/FAQ
       Et l, consultez le fichier SQL_TOC.html
     * Bases de donnes SQL
       http://chaos.mur.csu.edu.au/itc125/cgi/sqldb.html
     * Page de conception de la base de donne RIT
       http://www.it.rit.edu/~wjs/IT/199602/icsa720/icsa720postings.html
     * Site de renvoi sur les Bases de Donnes
       http://www.pcslink.com/~ej/dbweb.html
     * Didacticiels de programmation sur le Web
       http://www.eng.uc.edu/~jtilley/tutorial.html
     * Ressources de dveloppement
       http://www.ndev.com/ndc2/support/resources.htp
     * Liste de requte http://ashok.pair.com/sql.htm
     * Diverses IMAGES SQL
       http://jazz.external.hp.com/training/sqltables/main.html
     * Liste de ressources Internet
       http://www.eit.com/web/netservices.html

34. Appendix C - Instructions pour une installation rapide de Linux

   Si vous envisagez d'utiliser PostgreSQL sous Linux, et avez besoin
   d'aide dans l'installation de Linux, consultez les pointeurs donns
   dans cette annexe. Ils couvrent les sujets suivants :
     * Fonctionnalits saillantes de Linux - Pourquoi Linux constitue un
       meilleur serveur de donnes que Windows 95/NT
     * Instructions pour une installation rapide de Linux en 10 minutes
     * Liste des analogies Microsoft-Linux
     * tapes rapides pour recompiler le noyau Linux

     * Site principal  http://members.spree.com/technology/aldev/
     * Site miroir http://aldev.8m.com
     * Site miroir http://aldev.webjump.com
     * Site miroir http://homepages.infoseek.com/~aldev1/index.html
     * Site miroir http://www3.bcity.com/aldev/
