Database-SQL-RDBMS HOW-TO pour Linux
 Al Dev (Alavoor Vasudevan)        [email protected]
 v13.0,23 Octobre 1999, (version fran�aise 28 Octobre 1999)

 Ce document est un "guide pratique" pour la mise en place rapide d'un
 moteur de Base de Donn�es SQL et des outils frontaux sur un syst�me
 Unix. Il traite �galement du langage standard International ANSI/ISO
 SQL et passe en revue les m�rites/avantages d'un moteur de Base de
 Donn�es d�velopp� dans le cadre mondial de l'environnement de
 d�veloppement ouvert d'internet.  Ce document explique COMMENT mettre
 en place une Base de Donn�es Relationnelle SQL Objet de la nouvelle
 g�n�ration "PostgreSQL" sur votre syst�me unix qui pourra �tre
 utilis�e comme Base de Donn�es Serveur d'Application ou Serveur Web.
 PostgreSQL impl�mente 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 donn�es tels que interfaces
 utilisateur graphiques (GUI), outils RAD (D�veloppement Rapide
 d'Application ), interfa�age des langages de programmation ("C",
 "C++", Java, Perl), pilotes ODBC, JDBC ainsi que sur les outils et
 programmes interfa�age d'une Base de Donn�es Web . L'information
 donn�e ici est valable pour toutes autres plates-formes unix et autres
 Bases de Donn�es. Cette information sera tr�s utile aux nouveaux util�
 isateurs des Bases de Donn�es, de PostgreSQL et du langage SQL.  Ce
 document comporte aussi un didacticiel SQL et les sp�cifications de la
 syntaxe SQL qui devrait �tre tr�s utile aux d�butants. Les gens
 exp�riment�s trouveront dans ce document un guide de r�f�rence tr�s
 pratique. Pour les �tudiants, l'information donn�e ici leur permettra
 d'obtenir le code source du Syst�me de Gestion de Base de Donn�es
 Relationnel (SGBDR) PostgreSQL � partir duquel ils pourront �tudier
 comment un moteur de SGBDR SQL est �crit.
 ______________________________________________________________________

 Table des mati�res

































 1. Introduction

 2. Autres Formats de ce Document

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

 4. Qu'est-ce que PostgreSQL ?

 5. O� le trouver?

 6. PostgreSQL � grands pas

    6.1 Installation et tests
    6.2 Maximum RPM
    6.3 Test de PyGreSQL - Interface Python
    6.4 Test de Perl - Interface Perl
    6.5 Test des interfaces libpq, libpq++
    6.6 Test des interfaces Java
    6.7 Test des interfaces ecpg
    6.8 Test des exemples SQL - Types and fonctions d�finis par l'utilisateur
    6.9 Test des interfaces Tcl/Tk
    6.10 Test des interfaces ODBC
    6.11 Test des interfaces de la feuille de travail Motif MPSQL
    6.12 V�rification

 7. PostgreSQL Supporte des Base de Donn�es extr�mement grandes > 200 Gigas

 8. PostgreSQL est-il fiable?

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

 10. Pilotes d'interface pour PostgreSQL

    10.1 ODBC Pilotes pour PostgreSQL
    10.2 Pilotes UDBC pour PostgreSQL
    10.3 Pilotes JDBC pour PostgreSQL
    10.4 Java pour PostgreSQL

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

    11.1 interface Perl 5 pour PostgreSQL
    11.2 DBI Interface de Base de Donn�es Perl
       11.2.1 Qu'est-ce que DBI ?
       11.2.2 Pilote DBI pour PostgreSQL DBD-Pg-0.89
       11.2.3 Support technique sur DBI
       11.2.4 Qu'est-ce que c'est que DBI, DBperl, Oraperl and *perl?
       11.2.5 Sp�cifications DBI
       11.2.6 Probl�mes de compilation ou "Il �choue aux tests"
       11.2.7 DBI est-il support� sur les plates-formes Windows 95 / NT ?
       11.2.8 Qu'est-ce que DBM? Et pourquoi dois-je utiliser DBI � sa place?
       11.2.9 Est-ce que < ins�rez une fonctionnalit� ici > est support� par DBI?
       11.2.10 Est-ce que DBI est d'une quelconque utilit� pour la programmation CGI?
       11.2.11 Comment puis-je obtenir un temps de connexion plus rapide avec DBD::Oracle et CGI CGI?
       11.2.12 Comment puis-je obtenir une connexion persistante avec DBI et CGI?
       11.2.13 "Quand je lance un script perl de la ligne de commande, �a marche, mais, quand je le lance sous httpd, �a �choue!" Pourquoi?
       11.2.14 Puis-je faire de l'ex�cution en parall�le avec DBI?
       11.2.15 Comment puis-je invoquer des proc�dures enregistr�es avec DBI?
       11.2.16 Comment puis-je r�cup�rer les valeurs de retour de proc�dures enregistr�es avec DBI?
       11.2.17 Comment puis-je cr�er ou supprimer une base de donn�es avec DBI?
       11.2.18 Comment les valeurs NULL sont-elles prises en compte par DBI?
       11.2.19 Qu'est-ce que c'est que ces histoires de m�thodes func?
       11.2.20 Assistance et formation payante

 12. Outils de Gestion PostgreSQL

    12.1 PGACCESS - Un GUI pour la gestion de PostgreSQL
    12.2 Outil Windows interactif de g�n�ration de requ�te pour PostgreSQL
    12.3 Outil interactif de g�n�ration de requ�te pour PostgreSQL - ISQL
    12.4 MPMGR - Un outil de gestion de Base de Donn�es pour PostgresSQL

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

 14. Outils et Applications pour PostgreSQL

    14.1 PostgreSQL 4GL pour les applications de bases de donn�es web - Le syst�me de d�veloppement AppGEN
    14.2 WWW Web interface pour PostgresSQL - DBENGINE

 15. Module Apache Webserver pour PostgreSQL - NeoSoft NeoWebScript

    15.1 HEITML, extension, c�t� serveur de HTML et langage 4GL pour PostgreSQL
    15.2 Serveur Web America On-line AOL pour PostgreSQL
    15.3 Outil Syst�me de suivi de Probl�me/Projet pour PostgreSQL
    15.4 Conversion de fichiers dbase dbf en fichiers PostgreSQL

 16. Outil de Conception/Impl�mentation pour SGBD Web pour PostgreSQL - EARPW

    16.1 EARP, c'est quoi ?
    16.2 Implantation
    16.3 Ce dont vous avez besoin pour faire fonctionner EARP
    16.4 Comment fonctionne-t-il?
    16.5 O� puis-je le trouver?

 17. PHP Pr�-processeur Hypertexte - Langage de script c�t� serveur, avec HTML int�gr�, pour PostgreSQL

    17.1 Fonctionnalit�s principales
    17.2 Cr�dits
    17.3 PHP 3 - Bref Historique
    17.4 Bon, que puis-je faire avec PHP/FI?
    17.5 Un simple exemple
    17.6 Redirection CGI
       17.6.1 Notes Apache 1.0.x
       17.6.2 HTTPD Netscape
       17.6.3 HTTPD NCSA
    17.7 Lancer PHP/FI � partir de la ligne de commande

 18. Interface Python pour PostgreSQL

    18.1 O� le trouver PyGres ?
    18.2 Information et support

 19. Passerelle entre PostgreSQL et WWW - WDB-P95

    19.1 Le serveur PostgresSQL, pgperl, et httpd doivent-ils r�sider sur le m�me h�te?

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

    20.1 Interface "C"
    20.2 "C++" interface
    20.3 ESQL/C
    20.4 Op�rateurs sur les bits pour PostgreSQL

 21. Les Codes Kanji Japonais pour PostgreSQL

 22. Portage de PostgreSQL pour Windows 95/Windows NT

 23. Mailing Lists

    23.1 Obtenir un compte e-mail Gratuit
    23.2 Liste de Diffusion Anglaise
    23.3 Archive des listes de diffusion
    23.4 Liste de Diffusion Espagnole

 24. Livres et Documentations

    24.1 Guides utilisateur et Manuels
    24.2 Documentation en ligne
    24.3 Documents de R�f�rence: Ouvrages de r�f�rence utiles :
    24.4 Documents de Sp�cifications ANSI/ISO SQL - SQL 1992, SQL 1998
    24.5 Syntaxe de l'ANSI/ISO SQL 1992
    24.6 Syntaxe de l'ANSI/ISO SQL 1998
    24.7 Didacticiel SQL pour les d�butants
    24.8 Extension Temporelle � SQL92
    24.9 Partie 0 - Acquisition des Documents ISO/ANSI SQL
    24.10 Partie 1 - Etat Actuel de l'ISO/ANSI SQL
    24.11 Partie 2 - Fondements ISO/ANSI SQL
    24.12 Partie 3 - Interface d'Appel SQL ISO/ANSI
    24.13 Partie 4 - Modules M�moris�s Persistants ISO/ANSI SQL
    24.14 Partie 5 - ISO/ANSI SQL/Liens
    24.15 Partie 6 - Interface de Sp�cialisation (SQL/XA) ISO/ANSI SQL XA)
    24.16 Partie 7 - ISO/ANSI SQL Temporel
       24.16.1 INTRODUCTION
       24.16.2 �TUDE DE CAS - ENREGISTREMENT DE L'INFORMATION COURANTE
       24.16.3 �TUDE DE CAS - ENREGISTREMENT DE L'INFORMATION HISTORIQUE
       24.16.4 �TUDE DE CAS - PROJECTION
       24.16.5 �TUDE DE CAS - JOINTURE
       24.16.6 �TUDE DE CAS - AGR�GATS
       24.16.7 R�SUM�
    24.17 Partie 8 - SQL MULTIMEDIA ISO/ANSI (SQL/MM)

 25. Support Technique pour PostgreSQL

 26. Aspects �conomiques et Commerciaux

 27. Liste des autre Bases de Donn�es

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

 29. Conclusion

 30. FAQ - Questions sur PostgreSQL

 31. Notice de Copyright

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

 33. Appendice B - Tutoriel SQL � l'usage des d�butants

    33.1 Didacticiel pour PostgreSQL
    33.2 Pointeurs URL Internet

 34. Appendix C - Instructions pour une installation rapide de Linux



 ______________________________________________________________________

 11..  IInnttrroodduuccttiioonn

 Le but de ce document est de fournir une liste de pointeurs/URL
 d�taill�e de fa�on � mettre rapidement en oeuvre PostgreSQL et de
 mettre en avant l'int�r�t des syst�mes � Code Source Ouvert tel que
 PostgreSQL, Linux.

 Tout syst�me informatique au monde a besoin d'une base de donn�es pour
 stocker/retrouver les informations. La premi�re raison pour laquelle
 on utilise un ordinateur est de stocker, retrouver et traiter
 l'information et de faire cela tr�s rapidement, et donc, de faire
 �conomiser du temps.  En m�me temps, le syst�me doit �tre simple,
 robuste, rapide, fiable, �conomique et d'utilisation ais�e.  La Base
 de Donn�es constitue une PPAARRTTIIEE VVIITTAALLEE DDUU SSYYSSTT��MMEE des plus importantes
 car elle contient les donn�es indispensables de toute compagnie au
 monde.  Les syst�mes de gestion de base de donn�es les plus courants
 sont bas�s sur les sp�cifications ISO (International Standard
 Organisation) SQL lesquelles sont �galement bas�es sur les normes
 am�ricaines ANSI SQL. Les sp�cifications les plus courantes
 g�n�ralement utilis�es sont l'ISO/ANSI SQL 1992. La prochaine norme,
 encore en cours de d�veloppement est la SQL 1998/99 aussi appel�e
 SQL-3. Les syst�mes de gestion de bases de donn�es les plus r�pandus
 tels que Oracle, Sybase et Informix s'appuient sur ces standards ou
 essaient de les impl�menter.

 Il y a plus de 20 vari�t�s, commerciales/internet,  de syst�mes de
 gestion de base de donn�es actuellement utilis�s dans le monde et
 beaucoup plus dans un futur proche. En l'absence d'une norme telle que
 l'ANSI/ISO SQL, il serait tr�s difficile pour l'utilisateur de
 d�velopper une application une fois pour toutes et de l'utiliser avec
 tous les syst�mes de gestion de bases de donn�es. L'utilisateur veut
 d�velopper son application une fois pour toutes en utilisant les
 normes ISO SQL, ODBC, JDBC afin qu'elle puisse �tre d�ploy�e sur une
 grande vari�t� de syst�mes de gestion de base de donn�es a travers le
 monde.

 PostgreSQL est la Base de Donn�e LIBRE la plus populaire au monde qui
 impl�mente la plupart des normes ISO SQL, ANSI SQL/98, SQL/92 et ANSI
 SQL/89 RDBMS. PostgreSQL est une base de donn�es relationnelle Objet
 de la nouvelle g�n�ration et les futures normes ANSI SQL tels que le
 SQL 1998 (SQL-3) et au-del� traiteront de mani�re croissante de bases
 de donn�es Objet et de types de donn�es Objet. PostgreSQL est le seul
 SGBD (RDBMS - Relational Data Base Management System) au monde qui
 supporte les bases de donn�es Objet et SQL. Ce document vous explique
 comment installer le syst�me de gestion de base de donn�es, comment
 mettre en place la base de donn�es Web, la base de donn�es application
 , les frontaux GUIs et les programmes interfa�age. On ne saurait trop
 RECOMMANDER d'�crire vos applications bases de donn�es 100 %
 compatibles avec les normes ISO/ANSI SQL, ODBC, JDBC ceci rendant
 votre application portable sur de multiples SGBD (Syst�mes de gestion
 de Bases de Donn�es) tels que PostgreSQL, Oracle, Sybase, Informix
 etc.

 La haute qualit�, et un large ensemble de possibilit�s de PostgreSQL
 viennent du fait que ce syst�me est d�velopp� suivant le principe du
 �Mod�le de d�veloppement � Code Source Ouvert�. Les mod�les � Code
 Source Ouvert sont ceux ou la totalit� du code source est fournie et
 ou le d�veloppement se fait � travers l'internet par une tr�s vaste
 communaut� de cerveaux humains en r�seau. La tendance future des
 d�veloppement logiciels r�side dans ce que l'on appelle les "super
 autoroutes de l'information" qui s'�tendent � travers le monde entier.
 Dans les ann�es � 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 donn�es.

 Par l'application des principes de la statistique, des math�matiques
 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 interconnect�s par les super-autoroutes de
 l'information. Plus le nombre de cerveaux au travail sera grand,
 meilleure sera la qualit� du logiciel produit. Le mod�le "� Code
 Source Ouvert" �vite aussi de RR��IINNVVEENNTTEERR LLAA RROOUUEE, supprime LLAA
 DDUUPPLLIICCAATTIIOONN DDUU TTRRAAVVAAIILLtout en �tant particuli�rement �conomique, en
 diminuant les d�lais de distribution et en suivant les lois
 �conomiques modernes d'optimisation des ressources nationales et
 globales.  Une fois qu'un logiciel a �t� r�alis� par d'autres, vous
 NN''AAVVEEZZ PPAASS � recommencer le travail. Vous ne perdrez pas un temps
 pr�cieux sur quelque chose qui a d�j� �t� CCOORRRREECCTTEEMMEENNTT r�alis�.  Votre
 temps est extr�mement pr�cieux et il faut l'utiliser de mani�re
 efficace, car vous ne disposez que de 8 heures par jour pour
 travailler!!.  Dans un futur proche, � l'aube du 21-i�me si�cle, la
 mani�re de se procurer un logiciel va changer. Les utilisateurs
 accorderont en premier lieu leur pr�f�rence aux logiciels ouverts tel
 PostgreSQL, Linux etc...

 En achetant des binaires vous n'obtenez pas la v�ritable propri�t� du
 logiciel et ce n'est pas juste. Acheter un logiciel _p_e_u_t devenir une
 attitude archa�que. On a seulement besoin d'acheter un bon mat�riel,
 il vaut mieux d�penser de l'argent en mat�riel et trouver le logiciel
 sur internet.  Le point important, c'est que llee ggrrooss dduu ttrraavvaaiill est
 effectu� par le mat�riel. Le mat�riel est le cheval de bataille et le
 logiciel est l� pour le piloter.  Le mat�riel est tellement plus
 compliqu� que seulement 6 pays sur 180 au monde ont d�montr� leur
 capacit� � concevoir et � fabriquer les composants d'ordinateurs. La
 conception et la fabrication de composants d'ordinateurs est une
 technologie avanc�e. C'est un processus tr�s complexe, requ�rant de
 tr�s larges investissements en usine et en machines de production
 ma�trisant la technologie des 0.18 micron. Des milliards de
 transistors/circuits sont implant�s sur une petite puce de silicium.
 Des compagnies telles que Applied Material, AMD, Intel, Cyrix,
 Hitachi, Ibm et autres ont d�pens� d'importantes quantit�s d'hommes-
 ans de travail pour ma�triser des hautes technologies telles que la
 Micro-�lectronique et la Nano-�lectronique (Micro signifie millioni�me
 de m�tre et Nano signifie milliardi�me de m�tre).  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 m�me la nano-�lectronique sera
 utilis�es pour les circuits int�gr�s d'ordinateurs.  Les conducteurs
 en aluminium seront d�tr�n�s par ceux en cuivre sur les puces
 d'ordinateurs, car le cuivre est meilleur conducteur d'�lectrons.  En
 photo-lithographie, l'extr�me ultraviolet, les rayons X ou les
 techniques de faisceau d'electrons seront utilis�es pour graver des
 circuits de taille inf�rieure � 0.15 microns.  Dans environ 20 ans,
 les circuits en silicium seront remplac�es par des ordinateurs
 mol�culaires et des circuits biologiques qui seront des millions de
 fois plus rapides que les circuits en silicium.  Les mol�cules sont
 des groupes d'atomes, et les atomes sont de minuscules particules
 constituant la mati�re premi�re premi�re de tout ce qui nous entoure.
 Les ordinateurs mol�culaires utiliseront les mol�cules 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'alg�bre binaire (nombres 0 et 1).  Le tableau ci-dessous montre les
 progr�s et les tendances futures des puces d'ordinateurs.


















                 Progr�s dans les capacit�s des puces dans le futur
                 **************************************************
 +--------------------------------+--------+--------+--------+--------+-------+---------+
 | Item/Ann�e                     | 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 dissip�e maximum     | 70     | 90     | 110    | 130    | 175   |  600    |
 +--------------------------------+--------+--------+--------+--------+-------+---------+
 | fr�quence de fonct. puce  (MHz)| 750    | 1250   | 1500   | 2100   | 10000 | > 50 000|
 +--------------------------------+--------+--------+--------+--------+-------+---------+
 | Capacit� m�moire DRAM          | 256 MB | 1 GB   | 2 GB   | 4 GB   | 256 GB| > 1000GB|
 +--------------------------------+--------+--------+--------+--------+-------+---------+




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

 D'un autre c�t�, chaque pays au monde d�veloppe/produit du logiciel.
 En fait, n'importe qui dans le monde, avec un petit PC �conomique,
 peut cr�er un syst�me serveur de base de donn�es Oracle.  Mais cela
 lui prendra environ 10 ans (Le serveur de base de donn�es Oracle
 correspond � plus de 10 hommes-ans de travail). Un homme-an correspond
 au travail d'un homme � temps plein pendant une ann�e. 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 cr��s 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� effectu�e sur PostgreSQL
 au cours des 14 derni�res ann�es, cela n'aurait aucun sens de recr�er
 ex-nihilo un autre syst�me de gestion de base de donn�es satisfaisant
 aux normes ANSI/ISO SQL. Il est bien plus int�ressant de prendre le
 code existant de PostgreSQL, de commencer � l'utiliser, de l'am�liorer
 et d'y ajouter les fonctionnalit�s manquantes.

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

 On peut pr�dire que la demande de produits "Fabriqu� sur Internet" va
 cro�tre exponentiellement. Ces produits �tant de haute qualit�, de
 faible co�t et ayant une base d'utilisateurs et de d�veloppeurs
 extr�mement large.  Les pays qui n'utilisent pas  les produits
 "Fabriqu� sur Internet" seront les oubli�s de "la R�volution mondiale
 Internet" et resteront loin derri�re les autres pays. La raison
 provient de ce "qu'Internet" lui-m�me est la PPLLUUSS GGRRAANNDDEE compagnie de
 logiciels!

 22..  AAuuttrreess FFoorrmmaattss ddee ccee DDooccuummeenntt

 Ce document est publi� en 10 formats diff�rents 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 Fran�ais,
    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 r�dig� � 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 g�n�rer un fichier html)

 �  sgml2rtf  databasehowto.sgml     (pour g�n�rer un fichier RTF)

 �  sgml2latex databasehowto.sgml    (pour g�n�rer 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 r�seau) � <http://sunsite.unc.edu/LDP/hmirrors.html>
    choisissez un site et allez dans le r�pertoire
    /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
 contr�le | 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 Fl�ches, Page pr�c�dente ,Page suivante. Vous pouvez aussi
 utiliser les lettres 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' pour vous
 d�placer vers le haut, vers le bas, au centre, vers la page
 pr�c�dente, Pour d�sactiver le menu expert, tapez 'x'.

 Vous pouvez lire le fichier postscript en utilisant le programme 'gv'
 (ghostview) ou 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
 contr�le | 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




 AATTTTEENNTTIIOONN:: ce document est volumineux, le nombre total de pages
 (postscript) imprim�es 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.

 33..  LLeess llooiiss ddee llaa PPhhyyssiiqquuee ss''aapppplliiqquueenntt aauu llooggiicciieell !!

 Dans ce chapitre, on montrera comment la science joue un r�le
 important dans la cr�ation de nombreux objets comme le logiciel, cet
 univers, la masse, les atomes, les �nergies et m�me vous-m�me !.  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 plan�tes, le soleil, la lune, les �toiles, les
 super-amas, les humains etc... sont des objets cr��s par la science.
 Ce chapitre montre �galement comment les lois de la science et les
 statistiques t�moignent en faveur de syst�mes � 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
 syst�mes � code source ouvert gagnent rapidement de l'audience.  Et,
 si les r�gles de la statistique et les lois de la physique sont
 correctes, les syst�mes � code source ferm�s sont appel�s �
 DISPARA�TRE de cette plan�te.

 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 d�veloppement 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 corr�lation
 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 m�me 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.  Diff�rentes branches des sciences, telles que la physique,
 la chimie, etc... se rejoignent toutes dans un vaste ensemble, les
 math�matiques (�galement nomm�es Reine des Sciences).

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


 Un logiciel tel que PostgreSQL existe aujourd'hui gr�ce � 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 MM��MMEE entit�!.  Il y a 100 ans, le fait que la masse et l'�nergie
 soient la m�me chose n'�tait pas connu des gens !

 Les cellules des cerveaux humains consomment de l'�nergie en
 travaillant (� la cr�ation d'un logiciel), transformant de l'�nergie
 chimique en chaleur.  M�me pendant la lecture de ce paragraphe, les
 cellules de votre cerveau consomment du carburant et utilisent de
 l'�nergie. Donc INTERROMPEZ IMM�DIATEMENT VOTRE LECTURE!


 L'�nergie r�sultant de l'activit� des neurones (cellules du cerveau)
 peut �tre mesur�e en laboratoire. Par exemple, il y a de nombreux
 instruments comme le "d�tecteur de mensonge" et autres instruments
 m�dicaux 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 cons�quent, la
 thermodynamique a des effets indirects sur les logiciels comme
 PostgreSQL.

 Suivant la science, il est impossible de construire tout syst�me ou
 th�orie (y compris un syst�me logiciel de gestion de base de donn�es)
 qui soit parfait � 100 % et sans erreur.  C'est comme poursuivre un
 mirage, nous ne pourrons JJAAMMAAIISS atteindre l'objectif d'obtenir la
 perfection dans un syst�me ou une th�orie.  Les �quations/discussions
 math�matiques d�taill�es pour prouver qu'un "syst�me parfait" (de m�me
 pour prouver qu'un "syst�me imparfait") est impossible sont des sujets
 avanc�s et hors sujet dans ce document. Et une telle �tude
 math�matique 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 math�matiques peuvent
 facilement en explorer beaucoup d'autres.  Les autres dimensions sont
 ""iinnffiinniimmeenntt pplluuss ppeettiitteess"" que les atomes, et les atomes eux-m�mes 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
 math�matiques constituent un outil tr�s puissant.  Notre univers, si
 vous le regardez � partir d'un autre univers poss�de pratiquement une
 ttaaiillllee nnuullllee 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 !  Th�oriquement, il est possible de sortir de notre univers et
 de voyager sur des distances immenses (milliard d'ann�es lumi�re) en
 un temps nul et de rentrer en un point diff�rent de l'espace-temps !.
 La distance entre notre univers et les autres univers est en r�alit�
 nulle !.

 Bien qu'il y ait un nombre infini de dimensions, celles-ci peuvent
 �tre d�duites/g�n�r�es � 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
 d�truites.  Les math�maticiens 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 BBIIGG BBAANNGG, caus� par
 les interactions de particules atomiques d'autres dimensions, qui
 s'est produit il y a des milliards d'ann�es (environ 20 milliards
 d'ann�es).  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-m�me
 n'existait PAS l� et les atomes, les �toiles, les plan�tes et les
 galaxies n'existaient PAS! Les atomes qui sont � l'int�rieur de notre
 corps n'existaient PAS !!.  Tellement de choses se sont pass�es AVANT
 qu le temps n'existe !

 Le big bang et donc la naissance de notre univers r�sulte de quelques
 atomes de dimensions primaires. QQUUEELLQQUU''UUNN, (quelque chose ?), a caus�
 le fracassement de quelques atomes minuscules d'autres dimensions pour
 cr�er notre univers, et de nouvelles dimensions de temps, de longueur,
 de largeur et de hauteur �taient n�es !. Nous voyons l'effet d'une
 quelconque main dans se processus.  Ce processus nn''eesstt ppaass
 ppaarrffaaiitteemmeenntt ccoommpprriiss par les hommes. Ceux-ci essaient de g�n�rer un
 autre univers en laboratoire en simulant le big bang (Un acc�l�rateur
 tr�s puissant est en construction en Europe, un autre, en cours de
 construction � Dallas, aux USA, a �t� arr�t� par le congr�s US pour
 cause de coupes budg�taires). Il y a des atomes dans d'autres
 dimensions exactement comme nous avons des atomes dans notre univers.
 Th�oriquement, on peut cr�er/g�n�rer un nombre infini d'univers !. Ce
 processus est r�versible, ce qui veut dire que notre univers peut
 compl�tement s'effondrer sur lui-m�me et dispara�tre en quelques
 atomes d'autres dimensions !. C'est une analogie similaire � la fa�on
 dont VOUS �tes n�s � partir de de deux cellules minuscules qui se sont
 FRACASS�ES l'une contre l'autre pour cr�er une cellule unique. Cette
 toute petite cellule s'est divis�e et multipli�e en 6 billions de
 cellules pour devenir cet �tre humain de 1.80 m�tre (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 n�tre sont n�s 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 tr�s dynamique.  Cet univers continuera son expansion jusqu'� ce
 que quelque chose interf�re pour entra�ner son effondrement par
 l'application de pressions ayant des dimensions externes qui
 l'annihileront !!. Il y a deux possibilit�s  : 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 tr�s peu d'univers
 peuvent �tre b�tis � partir des dimensions primaires.  Vous n'�tes pas
 constitu�s 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 enti�rement transform�s
 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'ENTR�E/SORTIE pour
 d'autres univers. Ces portes d'entr�e/sortie peuvent s'ouvrir
 n'importe o�, m�me � l'int�rieur de votre corps !

 Il peut y avoir un nombre infini de couleurs, de langages
 informatiques, d'architectures de circuits d'ordinateurs et de
 th�ories, mais il NE PEUT PAS y avoir LA PERFECTION pour UN(E) SEUL(E)
 couleur, langage informatique, architecture ou syst�me !  Vous ne
 pouvez obtenir qu'une couleur (longueur d'onde, qu'un syst�me, qu'une
 base de donn�es ou une th�orie PRESQUE PARFAITE !  La nature est comme
 un kal�idoscope.

 En combinant les �nergies de millions de personnes � travers le monde
 via internet il est possible d'obtenir un syst�me PPRREESSQQUUEE PPAARRFFAAIITT (y
 compris un syst�me logiciel de gestion de base de donn�es). Prise
 individuellement, l'�nergie de chacun est microscopique, mais en
 mettant en r�seau un tr�s grand nombre de personnes, l'�nergie totale
 sera �norme, et elle peut �tre canalis�e pour cr�er un syst�me presque
 parfait.  Les �tres humains sont des cr�atures � l'�nergie et aux
 ressources finies, port�s � faire des erreurs allant de la plus
 triviale � la plus profonde. Puisque notre propension � faire des
 erreurs varie largement en fonction de qualifications particuli�res,
 d'exp�rience particuli�re et des humeurs du moment, la d�couverte et
 l'�limination des erreurs logicielles dues � des erreur humaines
 ordinaires peut �tre largement facilit�e en concentrant un grand
 nombre d'esprits humains � ce probl�me.

 Il est tr�s clair qu'internet peut mettre en r�seau un grand nombre de
 personnes, ce qui implique qu'internet poss�de beaucoup d'�nergie et
 de temps qui peuvent cr�er des produits logiciels de bien meilleure
 qualit�, en un temps plus court, que des compagnies commerciales. M�me
 de grandes compagnies comme Microsoft, IBM ne peuvent pas s'affranchir
 des lois de la physique mais finalement SSEE PPLLIIEERR aux lois de la
 science !

 Aujourd'hui, il y a beaucoup trop de syst�mes de base de donn�es
 relationnelles SQL RDBMS dans le monde se r�f�rant � une sp�cification
 ANSI/ISO SQL unique.  LL''hhuummaanniitt�� nnee ddooiitt ppaass ppeerrddrree ssoonn tteemmppss �� ccrr��eerr
 ddee ttrroopp nnoommbbrreeuuxx ppaaqquueettaaggeess llooggiicciieellss SSIIMMIILLAAIIRREESS OOUU IIDDEENNTTIIQQUUEESS  alors
 qu'il y a trop d'autres sujets en sciences qui m�riteraient
 l'attention.

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

 44..  QQuu''eesstt--ccee qquuee PPoossttggrreeSSQQLL ??

 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 mat�rielles sous diff�rents
 Syst�mes d'Exploitation.


              Quelquefois des corrections urgentes d'erreurs sont diffus�es apr�s la diffusion
              d'une r�vision de PostgreSQL. Vous pouvez appliquer ces rustines optionnelles
              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
 num�ro UN mondial des syst�mes de gestion de Base de Donn�es ouverts
 g�n�riques. PostgreSQL guidera, conduira, contr�lera, suivra et
 dictera le futur de l'ANSI/ISO SQL.  C'est-�-dire, l'impl�mentation et
 les id�es appara�tront en premier dans PostgreSQL puis, plus tard,
 seront incorpor�s dans l'ANSI/ISO SQL. PostgreSQL repr�sente "l'�tat
 de l'art" de la technologie des bases de donn�es.

 Le serveur Informix Universal (diffus� en 1997) est bas� sur une
 version pr�c�dente de PostgreSQL car Informix a achet� Illustra Inc.
 et l'a int�gr�e � Informix. La base de donn�es Illustra �tait
 compl�tement bas�e sur Postgres (version pr�c�dente de PostgreSQL).
 PostgreSQL est une am�lioration du SGBD POSTGRES, prototype de
 recherche de SGBD de la prochaine g�n�ration. PostgreSQL, tout en
 conservant le puissant mod�le de donn�es et la richesse des types de
 donn�es de POSTGRES, remplace le langage de requ�te PostQuel par un
 sous-ensemble �tendu de SQL.

 Le d�veloppement de PostgreSQL est r�alis� par une �quipe de
 d�veloppeurs Internet qui sont tous inscrits � la liste de diffusion
 "PostgreSQL d�veloppement mailing list".  Son coordinateur actuel est
 Marc G. Fournier

 �  [email protected]

    Cette �quipe est maintenant responsable des d�veloppements actuels
    et futurs de PostgreSQL. Naturellement, l'utilisateur de la base de
    donn�es est lui-m�me d�veloppeur de PostgreSQL!. La charge de
    d�veloppement est r�partie au sein d'un grand nombre d'utilisateurs
    finaux de bases de donn�es 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'am�lioration du code. Le code original Postgres, duquel
 PostgreSQL est issu, est le r�sultat de l'effort de nombreux �tudiants
 de troisi�me cycle, de deuxi�me 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 fonctionnalit�s 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 install�s comme
 serveurs, serveurs Web et serveurs d'application. Ce SGBD est tr�s
 avanc�, c'est un SGBD Relationnel-Objet (ORDBMS).

 PostgreSQL peut stocker plus de types de donn�es que les types
 traditionnels entier, caract�res, etc. - L'utilisateur peut cr�er des
 types, des fonctions, de l'h�ritage 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 r�alisation.

 �  Titre :           PostgreSQL SQL RDBMS Database (Syst�me de Gestion
    de Base de Donn�es Relationnelle Objet)

 �  Version actuelle : 6.5.2

 �  Age :           PostgreSQL a 14 ans. En d�veloppement depuis 1985

 �  Auteurs :         D�velopp� par des millions
    d'universit�s/compagnies sur internet au cours de ces 14 derni�res
    ANN�ES

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

 55..  OO�� llee ttrroouuvveerr??

 On peut acheter le CDROM Linux Redhat 5.0, le CDROM Linux Debian ou le
 CDROM Linux Slackware qui contiennent d�j� 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 syst�mes
 d'exploitation Unix, ainsi que la documentation compl�te.

 �  CDROM PostgreSQL au site Web principal � :
    <http://www.postgresql.org> 30 (U.S. dollars)

 Distributions uniquement en binaire de PostgreSQL :

 �  On peut ex�cuter PostgreSQL sans compiler le source. R�cup�rer 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 : r�cup�rer 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 indiqu�s 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>

 66..  PPoossttggrreeSSQQLL �� ggrraannddss ppaass

 Ce chapitre est destin� � vous aider � installer et � faire tourner la
 base de donn�es tr�s rapidement, en moins de 10 minutes.

 66..11..  IInnssttaallllaattiioonn eett tteessttss

 �tapes rapides pour installer, tester, v�rifier et faire tourner
 PostgreSQL Connectez-vous en tant qu'utilisateur _r_o_o_t.

 ______________________________________________________________________
 # rpm -qpl postgre*.rpm (pour consulter la liste des fichiers. Pour la documentation '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 r�pertoire  postgres et � sup�
 primer l'utilisateur unix 'postgres', une autre solution consiste �
 renommer l'utilisateur unix 'postgres' en quelque chose du genre
 'postgres2'.  L'installation doit �tre effectu�e dans un "r�pertoire
 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 d�marrage, 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 cr�er une base de donn�es de nom  :
                  (pour lire la documentation 'man createdb')
 bash$ psql mydatabase   (pour lire la documentation 'man psql')
 ..... dans psql utilisez les fl�ches haut/bas ou \s pour visualiser l'historique
 bash$ export DISPLAY=<hostname>:0.0; pgaccess mydatabase; (consulter 'man
 pgaccess')
 ______________________________________________________________________


 D�s 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 compl�mentaires concernant PostgreSQL,
 consultez  <http://www.postgresql.org>

 66..22..  MMaaxxiimmuumm RRPPMM

 T�l�chargez 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
 ______________________________________________________________________



 66..33..  TTeesstt ddee PPyyGGrreeSSQQLL -- IInntteerrffaaccee PPyytthhoonn


 ______________________________________________________________________
 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
 ______________________________________________________________________



 66..44..  TTeesstt ddee PPeerrll -- IInntteerrffaaccee PPeerrll


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


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

 ______________________________________________________________________
 bash$ perl -I/usr/lib/perl5/site_perl/5.004/i386-linux-thread ./example.newstyle
 ______________________________________________________________________


 .... Re_Wow! Vous avez fait tourner un perl qui acc�de � la base de
 donn�es PostgreSQL!!

 Prenez connaissance des fichiers d'exemples pour l'utilisation de
 l'interface perl.
 66..55..  TTeesstt ddeess iinntteerrffaacceess lliibbppqq,, lliibbppqq++++


 ______________________________________________________________________
 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 donn�es PostgreSQL!!

 66..66..  TTeesstt ddeess iinntteerrffaacceess JJaavvaa

 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 ligne '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 donn�es PostgreSQL!!

 66..77..  TTeesstt ddeess iinntteerrffaacceess eeccppgg







 ______________________________________________________________________
 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 donn�es
 PostgreSQL" int�gr�!!

 66..88..  TTeesstt ddeess eexxeemmpplleess SSQQLL -- TTyyppeess aanndd ffoonnccttiioonnss dd��ffiinniiss ppaarr ll''uuttiill��
 iissaatteeuurr


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



 66..99..  TTeesstt ddeess iinntteerrffaacceess TTccll//TTkk

 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
 ______________________________________________________________________



 66..1100..  TTeesstt ddeess iinntteerrffaacceess OODDBBCC

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

 66..1111..  TTeesstt ddeess iinntteerrffaacceess ddee llaa ffeeuuiillllee ddee ttrraavvaaiill MMoottiiff MMPPSSQQLL

 Procurez-vous les RPMs aupr�s de  <http://www.mutinybaysoftware.com>

 66..1122..  VV��rriiffiiccaattiioonn

 Pour v�rifier le parfait fonctionnement de PostgreSQL, faites tourner
 le paquetage de test de R�gression :- 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 pr�parer le paquetage)

 Le test de r�gression a besoin des Makefiles et de quelques fichiers en-t�te
 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 r�ussie, tous les "makefiles" et tous les fichiers en-t�te (headers) ont �t� cr��s.
 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
 ______________________________________________________________________




 77..  PPoossttggrreeSSQQLL SSuuppppoorrttee ddeess BBaassee ddee DDoonnnn��eess eexxttrr��mmeemmeenntt ggrraannddeess >> 220000
 GGiiggaass

 Les performances des machines � cpu 32-bit d�croissent rapidement
 quand la taille de la base de donn�es d�passe 5 GigaBytes. Vous pouvez
 faire tourner des bases de donn�es de 30 gigas avec un cpu 32-bit cpu
 mais cela ne sera pas tr�s performant. Les machines � CPU 32 bits
 imposent une limitation de 2 GB de m�moire RAM, de 2 GB pour le
 syst�me de fichier et d'autres limitations dues au syst�me
 d'exploitation.

 Si vous avez besoin d'utiliser des bases de donn�es extr�mement
 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 Donn�es et de grosses requ�tes.
 Les performances de PostgreSQL pour des interrogations sur de grandes
 tables et de grandes bases de donn�es 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
 m�moire et que le syst�me d'exploitation peut g�rer de tr�s grands
 syst�mes de fichiers. Cela permet des meilleures performances avec de
 grandes bases de donn�es, plus de m�moire centrale (RAM), plus de
 possibilit�s etc...

 88..  PPoossttggrreeSSQQLL eesstt--iill ffiiaabbllee??

 Le paquetage de "Test de R�gression" permet de s'assurer de son bon
 fonctionnement.  Il est inclus (src/test/regress) dans la distribution
 et permet � l'ordinateur d'effectuer la v�rification des op�rations
 SQL standard ainsi que des capacit�s de PostgreSQL.  Le paquetage de
 test contient d�j� 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 tr�s
 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 plut�t
 celle de l'esprit humain.

 Si c'est n�cessaire, 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
 R�gression permet d'asseoir la confiance des utilisateurs en
 PostgreSQL et facilite le d�ploiement rapide de PostgreSQL sur des
 syst�mes en production sans inqui�tude majeure.

 Le paquetage "Test de R�gression" peut �tre consid�r� comme un
 document technique ""TTRR��SS SSOOLLIIDDEE"" reconnu mutuellement par les
 d�veloppeurs et par les utilisateurs finaux.  Les d�veloppeurs de
 PostgreSQL utilisent de fa�on intensive ce paquetage durant la p�riode
 de d�veloppement et �galement avant de mettre le logiciel � la
 disposition des utilisateurs pour en assurer la parfaite qualit�.

 99..  OOuuttiill GGUUII ffrroonnttaall ppoouurr PPoossttggrreeSSQQLL ((IInntteerrffaaccee UUttiilliissaatteeuurr
 GGrraapphhiiqquuee))

 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) ``'' combin� avec un peu de JavaScript
 du c�t� 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) ``''

 �  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 pr�f�rence 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 ``''

 3. Le langage C++ Omnipr�sent avec QtEZ, QT, Lesstiff ou Motif.

 4. Java mais les programmes obtenus sont tr�s lents.

 D'autres outils sont disponibles  : PostgreSQL poss�de une
 biblioth�que d'interface Tcl/Tk dans la distribution nomm�e 'pgTcl'.
 Il existe un Environnement de D�veloppement Int�gr� (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 orient�e objet de Tcl appel�e 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.

 1100..  PPiillootteess dd''iinntteerrffaaccee ppoouurr PPoossttggrreeSSQQLL


 1100..11..  OODDBBCC PPiillootteess ppoouurr PPoossttggrreeSSQQLL

 ODBC signifie 'Open DataBase Connectivity'. C'est une norme r�pandue
 pour acc�der aux informations des bases de donn�es de diff�rents
 vendeurs. Le fonctionnement des applications �crites en utilisant les
 pilotes ODBC est garanti quelle que soient les bases de donn�es
 utilis�es PostgreSQL, Oracle, Sybase, Informix etc..


 �  PostODBC <http://www.insightdist.com/psqlodbc> est d�j� 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 donn�es.
    Open Link dispose aussi d'ODBC gratuits (quantit� limit�e) v�rifier
    aupr�s 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.

 1100..22..  PPiillootteess UUDDBBCC ppoouurr PPoossttggrreeSSQQLL

 UDBC est une version statique de pilote de gestionnaire et de DLL
 d'ODBC ind�pendant, pour int�grer le support de la connectivit� base
 de donn�es 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� limit�e) v�rifier aupr�s d'eux.

 1100..33..  PPiillootteess JJDDBBCC ppoouurr PPoossttggrreeSSQQLL

 JDBC signifie 'Java DataBase Connectivity'. Java est un langage de
 d�veloppement ind�pendant de la plate-forme d'utilisation d�velopp�
 par Sun Microsystems. Les programmeurs Java sont encourag�s � �crire
 leurs applications en utilisant JDBC pour faciliter la portabilit�
 entre diff�rentes 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� limit�e) v�rifier aupr�s 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 situ�s � -

 �  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>

 1100..44..  JJaavvaa ppoouurr PPoossttggrreeSSQQLL

 Ces classes pour PostgreSQL seront tr�s utiles au programmeur JAVA.

 �  <ftp://ftp.redhat.com/pub/contrib/i386> et regardez postgresql-
    jdbc-*.rpm

 �  <http://www.blackdown.org>

 1111..  PPiilloottee dd''iinntteerrffaaccee ddee SSGGBBDD PPeerrll ((DDaattaabbaassee IInntteerrffaaccee  DDBBII)) ppoouurr
 PPoossttggrreeSSQQLL


 1111..11..  iinntteerrffaaccee PPeerrll 55 ppoouurr PPoossttggrreeSSQQLL

 PERL est l'acronyme de 'Practical Extraction and Report Language'.
 Perl est disponible pour tous les syst�mes d'exploitation et toutes
 les plates-formes mat�rielles au monde. Vous pouvez utiliser Perl sous
 Windows95/NT, Apple Macintosh iMac, toutes les vari�t�s 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 MM��MMEE sur de nombreux mat�riels et syst�mes d'exploitations
 peu courants/g�n�ralement inconnus!!  Aussi, ne soyez pas surpris si
 vous voyez perl tourner sur un syst�me d'exploitation tr�s rarement
 utilis�.

 Cette interface est incluse dans la distribution de PostgreSQL. On la
 trouve dans le r�pertoire src/pgsql_perl5.

 �  Contact pour Pgsql_perl5 par email : [email protected]

 �  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\_Languages/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 Donn�es 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.*




 1111..22..  DDBBII IInntteerrffaaccee ddee BBaassee ddee DDoonnnn��eess PPeerrll

 1111..22..11..  QQuu''eesstt--ccee qquuee DDBBII ??

 L'interface de SGBD Perl (Perl Database Interface - DBI) est une
 interface logicielle d'acc�s � un SGBD (Application Programming
 Interface - API) pour le langage PERL. Les sp�cifications de l'API DBI
 perl d�finissent un ensemble de fonctions, de variables et de
 conventions d'acc�s � un SGBD coh�rent et ind�pendant 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� �
    [email protected]

 1111..22..22..  PPiilloottee DDBBII ppoouurr PPoossttggrreeSSQQLL DDBBDD--PPgg--00..8899

 Vous pouvez obtenir DBD-Pg-0.89.tar.gz de l'un des sites indiqu�s 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 Donn�es 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)

 1111..22..33..  SSuuppppoorrtt tteecchhnniiqquuee ssuurr DDBBII

 Veuillez envoyer vos commentaires et vos comptes-rendus d'erreurs �

 �  [email protected]

 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.


 1111..22..44..  QQuu''eesstt--ccee qquuee cc''eesstt qquuee DDBBII,, DDBBppeerrll,, OOrraappeerrll aanndd **ppeerrll??

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

 ``DBI est une interface logicielle d'acc�s aux bases de donn�es
 (Application Programming Interface  -API) pour le langage Perl. Les
 sp�cifications DBI API d�finissent un ensemble de fonctions, de
 variables et de conventions coh�rents d'interfa�age � une base de
 donn�es ind�pendant de la base de donn�es utilis�e.''

 En langage simple, l'interface DBI permet aux utilisateurs d'acc�der
 de mani�re transparente � de multiples base de donn�es. Ainsi, Si vous
 vous connectez � une base de donn�es Oracle, Informix, mSQL, Sybase ou
 n'importe quelle autre, vous n'avez pas besoin de conna�tre les
 m�canismes sous-jacents de la couche 3GL. L'API d�finie par DBI
 fonctionnera sur tous ces types de bases de donn�es.

 On obtient un b�n�fice du m�me ordre en ayant la possibilit� de se
 connecter � deux bases de donn�es de diff�rents fournisseurs � l'aide
 du m�me script perl, i.e., je veux lire des donn�es d'une base de
 donn�es Oracle et les ins�rer dans une Informix � partir du m�me
 programme. La couche logicielle DBI permet de le r�aliser simplement
 et efficacement.

 DBperl est le nom ancien des sp�cifications de l'interface. Il est
 utilis� maintenant pour d�signer les modules perl4 d'interfa�age des
 bases de donn�es tels que oraperl, isqlperl, ingperl et autres. Ces
 interfaces n'ont pas d'API standard et ne sont g�n�ralement pas
 support�s.

 Voici une liste des modules DBperl, de leur �quivalent DBI
 correspondants et du support d'information. Notez que les auteurs
 cit�s ici ne maintiennent g�n�ralement pas le module DBI de la base de
 donn�es. Les adresses E-mail n'ont pas �t� v�rifi�es et ne doivent
 �tre utilis�es que pour les questions concernant les modules perl4
 list�s ci-dessous. Les questions sur les pilotes DBI doivent �tre
 directement adress�es aux listes de diffusion des utilisateurs DBI.


        Nom du module SGBD requis         Auteur          DBI
          ----------- -----------------   ------          ---
          Sybperl     Sybase              Michael Peppler DBD::Sybase
                                          <[email protected]>
          Oraperl     Oracle 6 & 7        Kevin Stock     DBD::Oracle
                                          <[email protected]>
          Ingperl     Ingres              Tim Bunce &     DBD::Ingres
                                          Ted Lemon
                                          <[email protected]>
          Interperl   Interbase           Buzz Moschetti  DBD::Interbase
                                          <[email protected]>
          Uniperl     Unify 5.0           Rick Wargo      None
                                          <[email protected]>
          Pgperl      Postgres            Igor Metz       DBD::Pg
                                          <[email protected]>
          Btreeperl   NDBM                John Conover    SDBM?
                                          <[email protected]>
          Ctreeperl   C-Tree              John Conover    None
                                          <[email protected]>
          Cisamperl   Informix C-ISAM     Mathias Koerber None
                                          <[email protected]>
          Duaperl     X.500 Directory     Eric Douglas    None
                      User Agent




 Cependant, certains modules DBI poss�dent des couches logicielles
 d'�mulation. Ainsi DBD::Oracle est livr� avec une couche d'�mulation
 Oraperl, ce qui permet d'ex�cuter d'anciens scripts oraperl sans modi�
 fication. La couche logicielle d'�mulation traduit les appels oraperl
 API en appels DBI et les ex�cute.

 Voici une table des  couches d'�mulation :


          Module        Couche d'�mulation     �tat
          ------          ---------------     ------
          DBD::Oracle     Oraperl             Compl�te
          DBD::Informix   Isqlperl            En cours de  d�veloppement
          DBD::Sybase     Sybperl             Fonctionnelle? ( N�cessite une
                                              v�rification)
          DBD::mSQL       Msqlperl            En version exp�rimentale avec
                                              DBD::mSQL-0.61




 L'�mulation Msqlperl est un cas particulier. Msqlperl est un pilote
 perl5 pour les bases de donn�es mSQL , mais il ne se conforme pas aux
 sp�cifications DBI. On d�sapprouve son utilisation en faveur de
 DBD::mSQL. On peut t�l�-charger Msqlperl � partir du site CPAN via :

 �  <http://www.perl.com/cgi-bin/cpan_mod?module=Msqlperl>

 1111..22..55..  SSpp��cciiffiiccaattiioonnss DDBBII


 Il existe quelques sources d'information sur  DBI.  Sp�cifications DBI

 �  <http://www.hermetica.com/technologia/perl/DBI/doc/dbispec>

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

 Il faut consid�rer ce dernier document comme ne pr�sentant qu'un
 int�r�t historique et ne pas l'utiliser en tant que manuel de
 programmation ou document de r�f�rence. Il demeure cependant une
 source d'informations tr�s utile.

 Documentation POD (Plain Old Documentation) Les PODs sont des morceaux
 de documentation g�n�ralement noy�s � l'int�rieur des programmes perl
 qui documentent le code "sur place".  Ce sont des ressources tr�s
 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 Sp�cification DBI Les PODs pour la sp�cification 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 mani�re 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
 enti�rement list�e et d�crite.

 DBD::mSQL Les utilisateurs du module DBD::mSQL peuvent lire des
 informations sur quelques fonctions priv�es 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 syst�me en tapant :

 perldoc DBI::FAQ

 Ceci peut �tre plus pratique pour ceux qui ne sont pas connect�s �
 l'Internet ou le sont d'une mani�re peu pratique.

 Les POD en g�n�ral On peut lire des informations sur la mani�re
 d'�crire des PODs, ainsi que sur la philosophie des PODs en g�n�ral en
 tapant :

 perldoc perlpod

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

 Discussions, Cancans et Observations

 �  <http://www.hermetica.com/technologia/perl/DBI/tidbits>

 Il y a , de temps en temps, une s�rie 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 num�ro 5 de ``The Perl Journal''.  Il est extr�mement
 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 r�f�rence est celle d'un livre
 � �crire par Alligator Descartes publi� par O'Reilly et Associ�s.

 Listes de diffusion Il y a trois listes de diffusion pour DBI g�r�es
 par Ted Lemon.  On peut s'inscrire � toutes et r�silier cette
 inscription � travers le World Wide Web � :

 �  Listes de diffusion  <http://www.fugue.com/dbi>

 Les listes o� les utilisateurs peuvent participer sont:

 ddbbii--aannnnoouunnccee Cette liste de diffusion est r�serv�e uniquement aux
 annonces.  Si vous n'arrivez pas � utiliser le formulaire sur la page
 WWW indiqu�e ci-dessus, inscrivez-vous � cette liste de la mani�re
 suivante :

 �  Email: [email protected]

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

 ddbbii--ddeevv Cette liste de diffusion est � l'usage des d�veloppeurs pour
 discuter des id�es et des concepts de l'interface DBI, API et des
 m�canismes des pilotes. Seulement utiles pour les d�veloppeurs et les
 personnes int�ress�es. Trafic faible.  Si vous n'arrivez pas �
 utiliser le formulaire sur la page WWW indiqu�e ci-dessus, inscrivez-
 vous � cette liste de la mani�re suivante :

 �  Email: [email protected]

    avec 'subscribe' dans le corps du message.

 ddbbii--uusseerrss Cette liste de diffusion est un lieu de discussion g�n�rale
 utilis�e pour les rapports d'erreurs, la discussion sur diff�rents
 probl�mes et des demandes de renseignement d'int�r�t g�n�ral. Si vous
 n'arrivez pas � utiliser le formulaire sur la page WWW indiqu�e ci-
 dessus, inscrivez-vous � cette liste de la mani�re suivante :

 �  Email: [email protected]

    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 Europ�ennes  <http://www.rosat.mpe-
    garching.mpg.de/mailing-lists/PerlDB-Interest>

 1111..22..66..  PPrroobbll��mmeess ddee ccoommppiillaattiioonn oouu ""IIll ��cchhoouuee aauuxx tteessttss""

 Si vous avez un vidage m�moire, essayez le module Devel::CoreStack
 pour g�n�rer une trace de la pile du vidage m�moire. 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 syst�me d'exploitation et toutes
 autres informations pertinentes.  Plus vous fournirez d'informations
 plus vite les d�veloppeurs pourront r�soudre les probl�mes. Si vous ne
 nous envoyez rien, n'attendez rien en retour.

 1111..22..77..  DDBBII eesstt--iill ssuuppppoorrtt�� ssuurr lleess ppllaatteess--ffoorrmmeess WWiinnddoowwss 9955 // NNTT ??

 Les portages de DBI et de DBD::Oracle pour Win32 ports font maintenant
 partie int�grante de DBI, donc, la r�cup�ration d'une version de DBI
 sup�rieure � 0.81 doit donner satisfaction.  Vous pouvez acc�der aux
 bases de donn�es Microsoft Access et SQL-Server � partir de DBI via
 ODBC.  Une "couche d'�mulation" DBI exp�rimentale 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>

 1111..22..88..  QQuu''eesstt--ccee qquuee DDBBMM?? EEtt ppoouurrqquuooii ddooiiss--jjee uuttiilliisseerr DDBBII �� ssaa
 ppllaaccee??

 A l'origine UNIX �tait bienheureux avec sa "Base de Donn�es" rustique
 reposant sur des fichiers, nomm�e syst�me dbm. Avec dbm vous
 enregistrez les donn�es dans des fichiers et les retrouvez rapidement.
 Cependant, il souffre de s�rieux inconv�nients.

 Verrouillage des fichiers

 Les syst�mes dbm ne permettent par un verrouillage particuli�rement
 robuste des fichiers, de m�me qu'il n'y a pas de possibilit� de
 corriger les probl�mes survenants lors d'�critures [ dans la base de
 donn�es ] simultan�es.

 Structures de Donn�es Arbitraires

 Les syst�mes dbm permettent seulement une simple structure de donn�es
 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 syst�mes dbm.

 Cependant, les syst�mes dbm continuent d'offrir des fonctions utiles
 pour les utilisateurs ayant des ensembles de donn�es simples et des
 ressources limit�es, puisqu'ils sont rapides, robustes et extr�mement
 bien test�s. Les modules Perl pour acc�der aux syst�mes dbm font
 maintenant partie int�grante de la distribution Perl via le module
 AnyDBM_File.''

 Pour r�sumer, DBM est une solution parfaitement satisfaisante pour les
 bases de donn�es essentiellement en lecture seule, ou pour des
 ensembles de donn�es simples et r�duits. Toutefois, pour des ensembles
 de donn�es plus importants, sans mentionner un verrouillage des
 transactions robuste, on recommandera aux utilisateurs de pr�f�rer
 DBI.

 1111..22..99..  EEsstt--ccee qquuee << iinnss��rreezz uunnee ffoonnccttiioonnnnaalliitt�� iiccii >> eesstt ssuuppppoorrtt��
 ppaarr DDBBII??

 Si l'on suppose que la fonctionnalit� en question n'est pas, en
 standard, sp�cifique d'un SGBD, alors la r�ponse sera non.

 DBI repr�sente un API qui doit fonctionner avec la plupart des SGBD,
 et n'a pas de fonctionnalit� sp�cifique � un SGDB particulier.

 Cependant, les auteurs d'un pilote peuvent, s'ils le d�sirent, ajouter
 une fonctionnalit� sp�cifique � un SGBD � travers les m�thodes func
 d�finies dans l'API DBI. Les d�veloppeurs de Scripts doivent noter que
 l'utilisation de cette fonctionnalit� au travers de ces m�thodes func
 a de bonnes chances d'en sacrifier la portabilit� entre les diff�rents
 SGBD.

 1111..22..1100..  EEsstt--ccee qquuee DDBBII eesstt dd''uunnee qquueellccoonnqquuee uuttiilliitt�� ppoouurr llaa pprrooggrraamm��
 mmaattiioonn CCGGII??

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

 DBI conf�re aux programmeurs CGI la possibilit� d'offrir des base de
 donn�es WWW � leurs utilisateurs, ce qui donne � ces utilisateurs la
 possibilit� d'utiliser de grandes quantit�s de donn�es bien
 organis�es. DBI donne aussi la possibilit� , si un site re�oit un
 trafic trop important pour les performances du serveur, d'am�liorer ce
 serveur de base de donn�es de fa�on transparente, sans modifier les
 scripts CGI.

 1111..22..1111..  CCoommmmeenntt ppuuiiss--jjee oobbtteenniirr uunn tteemmppss ddee ccoonnnneexxiioonn pplluuss rraappiiddee
 aavveecc DDBBDD::::OOrraaccllee eett CCGGII CCGGII??

 Le serveur httpd Apache maintient un ensemble de processus fils httpd
 pour servir les requ�tes clients.

 En utilisant le module mod_perl Apache de Doug MacEachern,
 l'interpr�teur perl est inclus dans le processus fils httpd. Les
 modules CGI, DBI, et vos autres modules favoris peuvent �tre charg�s
 au lancement de chaque processus fils. Ces modules ne seront pas
 recharg�s � moins d'�tre modifi�s 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>

 1111..22..1122..  CCoommmmeenntt ppuuiiss--jjee oobbtteenniirr uunnee ccoonnnneexxiioonn ppeerrssiissttaannttee aavveecc DDBBII
 eett CCGGII??

 En utilisant le module Apache::DBI de Edmund Mergl, les connexions �
 la base de donn�es sont enregistr�es dans une table avec chacun des
 processus httpd fils. Si votre application utilise une base de donn�es
 simple utilisateur, cette connexion peut �tre lanc�e avec chaque
 processus fils. Actuellement, les connexions � la base de donn�es ne
 peuvent pas �tre partag�es entre processus httpd fils.  Apache::DBI
 peut �tre t�l�-charg� de CPAN via :

 �  <http://www.perl.com/cgi-bin/cpan_mod?module=Apache::DBI>

 1111..22..1133..  ""QQuuaanndd jjee llaannccee uunn ssccrriipptt ppeerrll ddee llaa lliiggnnee ddee ccoommmmaannddee,, ��aa
 mmaarrcchhee,, mmaaiiss,, qquuaanndd jjee llee llaannccee ssoouuss hhttttppdd,, ��aa ��cchhoouuee!!"" PPoouurrqquuooii??


 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'ex�cute
 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'ex�cuter dans ces circonstances
 �choueront.  Pour r�soudre ce probl�me, initialisez l'environnement de
 votre base de donn�es dans un bloc BEGIN ( ) en t�te de votre script.
 Ceci devrait r�soudre votre probl�me.  De m�me, 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 compl�mentaires. Il
 est peu probable que ce probl�me concerne DBI.  Lisez ces DEUX
 documents tr�s soigneusement !

 �  Idiot's Guide to Solving Perl / CGI problems
    <http://www.perl.com/perl/faq/index.html>

 1111..22..1144..  PPuuiiss--jjee ffaaiirree ddee ll''eexx��ccuuttiioonn eenn ppaarraallll��llee aavveecc DDBBII??

 A la date de ce document, non. perl ne permet pas l'ex�cution en
 parall�le. Cependant, l'ex�cution en parall�le doit faire partie de la
 distribution perl de base � compter de la version 5.005, ce qui sous-
 entend que le support de l'ex�cution en parall�le pour DBI devrait
 suivre rapidement.  Pour quelques exemples de code OCI pour Oracle
 ayant des instructions SELECT avec ex�cution en parall�le, voir :

 �  <http://www.hermetica.com/technologia/oracle/oci/orathreads.tar.gz>


 1111..22..1155..  CCoommmmeenntt ppuuiiss--jjee iinnvvooqquueerr ddeess pprroocc��dduurreess eennrreeggiissttrr��eess aavveecc
 DDBBII??

 En supposant que vous avez cr�� une proc�dure enregistr�e �
 l'int�rieur de la base de donn�es cible, e.g., une base de donn�es
 Oracle, vous pouvez utiliser $ dbh-> do pour ex�cuter imm�diatement
 cette proc�dure. Par exemple,


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

 1111..22..1166..  CCoommmmeenntt ppuuiiss--jjee rr��ccuupp��rreerr lleess vvaalleeuurrss ddee rreettoouurr ddee
 pprroocc��dduurreess eennrreeggiissttrr��eess aavveecc DDBBII??

 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;




 1111..22..1177..  CCoommmmeenntt ppuuiiss--jjee ccrr��eerr oouu ssuupppprriimmeerr uunnee bbaassee ddee ddoonnnn��eess aavveecc
 DDBBII??

 La cr�ation et la suppression de bases de donn�es sont des concepts
 qui sont beaucoup trop abstraits pour �tre support�s par DBI. Par
 exemple, Oracle ne supporte pas le concept de d�truire une base de
 donn�es du tout ! Ainsi, dans Oracle, le serveur de base de donn�es
 est essentiellement la base de donn�es elle-m�me alors que dans mSQL,
 le processus serveur s'ex�cute tranquillement sans aucune base de
 donn�es cr��e. C'est un probl�me trop h�t�rog�ne pour s'y attaquer.
 Quelques pilotes, cependant, supportent la cr�ation et la suppression
 de bases de donn�es � travers des m�thodes func priv�es. Il vous faut
 regarder dans la documentation des pilotes que vous utilisez pour
 v�rifier s'ils supportent de tels m�canismes.

 1111..22..1188..  CCoommmmeenntt lleess vvaalleeuurrss NNUULLLL ssoonntt--eelllleess pprriisseess eenn ccoommppttee ppaarr
 DDBBII??

 Les valeurs NULL dans DBI sont trait�es comme la valeur undef. Des
 NULLs peuvent �tre ins�r�s dans les bases de donn�es en tant que NULL,
 par exemple :


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




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

 1111..22..1199..  QQuu''eesstt--ccee qquuee cc''eesstt qquuee cceess hhiissttooiirreess ddee mm��tthhooddeess ffuunncc??

 Une m�thode func est d�finie � l'int�rieur de DBI comme �tant un point
 d'entr�e pour une fonctionnalit� d'une base de donn�es sp�cifique, eg,
 la possibilit� de cr�er ou supprimer des bases de donn�es.
 L'invocation de ces m�thodes sp�cifiques aux pilotes est simple. Par
 exemple, pour invoquer une m�thode createDatabase qui n'a qu'un seul
 argument, on �crira :


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




 Les d�veloppeurs de logiciels doivent cependant noter que ces m�thodes
 func ne sont pas portables entre SGBD.
 1111..22..2200..  AAssssiissttaannccee eett ffoorrmmaattiioonn ppaayyaannttee

 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.

 PPEERRLL CCLLIINNIICC :: La soci�t� "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>

 1122..  OOuuttiillss ddee GGeessttiioonn PPoossttggrreeSSQQLL


 1122..11..  PPGGAACCCCEESSSS -- UUnn GGUUII ppoouurr llaa ggeessttiioonn ddee PPoossttggrreeSSQQLL

 PgAccess est une interface Tcl/Tk � PostgreSQL.  Il est d�j� inclus
 dans la distribution de PostgreSQL.  Pour une copie plus r�cente, vous
 pouvez acc�der au site web :

 �  <http://www.flex.ro/pgaccess>

 �  Si vous avez des commentaires, des suggestions pour des
    am�liorations, n'h�sitez pas � envoyer un courrier �lectronique � :
    [email protected]

 Fonctionnalit�s de PgAccess

 Fen�tres de PgAccess : Fen�tre principale, cr�ateur de tables, vue de
 table (interrogation), cr�ateur visuel d'interrogation .

 Tables


 �  - Ouverture de tables pour la visualisation, 200 enregistrements
    maximum ( modifiable dans le menu des pr�f�rences )

 �  - re-dimensionnement d'une colonne en tirant la ligne verticale de
    la grille ( plus pratique � r�aliser � l'int�rieur m�me de la table
    que dans l'en-t�te)

 �  - texte encadr� dans les cellules - disposition enregistr�e pour
    chacune des tables)

 �  - importation/exportation vers des fichiers externes (SDF,CSV)

 �  - possibilit� de filtres (filtre de saisie, tel que (prix>3.14)

 �  - possibilit�s de tri (saisie manuelle de(s) champ(s) � trier)

 �  - �dition en ligne

 �  - assistant g�n�rateur de table am�lior�

 �  - �dition de champ am�lior�e

 Requ�tes

 �  - d�finition, �dition et enregistrement de "requ�tes d�finies par
    l'utilisateur"


 �  - enregistrement de requ�tes en tant que vues

 �  - ex�cution des requ�tes

 �  - visualisation des r�sultats de requ�tes de type select

 �  - suppression et changement de nom de requ�te

 �  - cr�ateur visuel de requ�tes avec possibilit�s de
    "glisser/d�poser".  Pour tous ceux d'entre vous qui ont l'extension
    pour Netscape Navigator de Tcl/Tk install�e, vous pouvez le voir au
    travail en cliquant ici

 S�quences

 �  - d�finition de s�quences, ainsi que leurs suppression et
    inspection Fonctions

 �  - d�finition, inspection et suppression de fonctions en langage SQL

 Les futures impl�mentations disposeront

 �  - de la conception des tables (ajout de nouveaux champs, changement
    de nom, etc.)

 �  - de la d�finition de fonction

 �  - d'un g�n�rateur de rapport

 �  - d'un langage de script de base


 Si vous avez des commentaires, ou des suggestions d'am�lioration,
 envoyez un courrier �lectronique � :

 �  [email protected]

 Informations concernant libgtcl

 Vous aurez �galement besoin de la biblioth�que d'interface de
 PostgreSQL � Tcl, disponible comme module Tcl/Tk chargeable. Son nom
 est libpgtcl et le source est situ� dans le r�pertoire PostgreSQL
 /src/interfaces/libpgtcl.  Pr�cis�ment, vous aurez besoin d'une
 biblioth�que libpgtcl qui soit "chargeable" � partir de Tcl/Tk.  Ce
 qui est techniquement diff�rent d'un fichier objet chargeable
 PostgreSQL ordinaire, car libpgtcl est constitu�e d'un ensemble de
 fichiers objets. Sous Linux, on l'appelle libpgtcl.so. Vous pouvez
 t�l�-charger � partir d'ici une version d�j� compil�e pour les
 syst�mes Linux i386. La seule chose � faire est de copier libpgtcl.so
 dans le r�pertoire biblioth�que syst�me (/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 biblioth�que
 libpgtcl.

 1122..22..  OOuuttiill WWiinnddoowwss iinntteerraaccttiiff ddee gg��nn��rraattiioonn ddee rreeqquu��ttee ppoouurr PPoosstt��
 ggrreeSSQQLL

 ("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 requ�te SQL de
 Microsoft WISQL! Il dispose d'un GUI agr�able et d'un historique des
 commandes. Vous pouvez utiliser le coup�/coll� ainsi que d'autres
 fonctionnalit�s sympathiques pour accro�tre votre productivit�.


 �  <http://www.troubador.com/~keidav/index.html>

 �  Email : [email protected]

 �  <http://www.ucolick.org/~de/> dans le fichier tcl_syb/wisql.html

 �  <http://www.troubador.com/~keidav/index.html>

 �  Email : [email protected]

 1122..33..  OOuuttiill iinntteerraaccttiiff ddee gg��nn��rraattiioonn ddee rreeqquu��ttee ppoouurr PPoossttggrreeSSQQLL --
 IISSQQLL

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


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




 C'est tr�s convivial et d'utilisation facile.  C'est aussi tr�s utile
 pour �crire des scripts pour les interpr�teurs de commandes.

 1122..44..  MMPPMMGGRR -- UUnn oouuttiill ddee ggeessttiioonn ddee BBaassee ddee DDoonnnn��eess ppoouurr PPoossttggrreessSSQQLL

 MPMGR fournira un outil graphique de gestion de Base de Donn�es pour
 PostgresSQL. Vous pouvez le trouver �

 �  <http://www.mutinybaysoftware.com/>

 �  Email: [email protected]

 �  <http://www.troubador.com/~keidav/index.html>

 �  Email: [email protected]

 �  <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: [email protected]

 1133..  MMiissee eenn ppllaaccee ddee pplluussiieeuurrss mmaacchhiinneess PPoossttggrreeSSQQLL aavveecc uunn sseeuull mmoonnii��
 tteeuurr

 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 particuli�re. 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 (d�veloppement, test, production), serveurs Web, serveurs
 ftp, serveurs Intranet, serveur de Courrier, serveurs de Nouvelles,
 sur une �tag�re.  Le bo�tier commutateur peut �tre �galement utilis�
 pour contr�ler 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 mat�riels informatique <http://www.warehouse.com> Un
    commutateur manuel 4-ports KVM (PS/2) vaut environ $89.99.
    R�f�rence 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 vid�o

 �  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 mat�riels
    d'ordinateur  <http://www.warehouse.com>

 �  Better Box Communications Ltd.
    <http://www.betterbox.com/info.html>

 �  Allez chez votre marchand de mat�riel 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 particuli�rement �conomique). Les vendeurs locaux vendent
 uniquement du mat�riel SSAANNSS 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 donn�es 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 mat�riel que vous achetez est support� par le
    Linux Redhat. V�rifiez sur le site ftp de Redhat le mat�riel
    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 contr�ler de nombreux syst�mes �
 l'aide de seulement un clavier et un moniteur!

 On trouvera ci-dessous un eexxttrraaiitt dduu ccaattaalloogguuee ddee nneettwwoorrkktteecchhnniicc IInncc

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

 Pour recevoir notre catalogue, veuillez envoyer votre adresse par
 courrier �lectronique � : [email protected]

 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 pr�sence constante du clavier, de l'�cran et du mulot pour chacun
 des PC's connect�s.

 Fonctionnalit�s et Applications


 �  Clavier, face avant ou commande � distance

 �  utilisation de connecteurs de mulots 9 broches D S�rie ou 6 broches
    miniDIN

 �  utilisation de connecteurs de clavier 5 broches DIN ou 6 broches
    miniDIN

 �  r�solution vid�o 1600x1200 sans d�gradation

 �  Utilisation de c�bles standards

 �  Bo�tier pour bureau ou pour montage en rack

 Sp�cifications - Clavier


 �  Tous les connecteurs dont femelles

 �  5 broches DIN ou 6 broches miniDIN

 �  Permettent un Re-d�marrage (boot) mat�riel ou logiciel de tous les
    PC's � chaque instant

 Contr�les - 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 entra�ne le
    fonctionnement dans les modes SCAN, BROADCAST ou COMMAND

 �  Les LEDs en face avant indiquent le mode d'op�ration du clavier

 �  L'appui sur CTRL+* entra�ne le fonctionnement en mode COMMAND

 �  Les modes SCAN, BROADCAST ou COMMAND sont disponibles

 Mulot

 * 9 broches D s�rie

 �  o Le commutateur NTI �mule le mulot Microsoft s�rie pour tous les
    PC's


 �  o 9 broches D m�le 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 c�ble, � distance

 �  Optionnel--doit �tre acquis s�par�ment

 �  Fonctionnement identique � celui "Boutons en face avant"

 Moniteur (�cran) - VGA

 �  Bande passante 150 MHz

 �  R�solution 1600X1200 sans d�gradation

 �  Tous les connecteurs sont des connecteurs femelles

 1144..  OOuuttiillss eett AApppplliiccaattiioonnss ppoouurr PPoossttggrreeSSQQLL

 1144..11..  LLee ssyysstt��mmee ddee dd��vveellooppppeemmeenntt AAppppGGEENN PPoossttggrreeSSQQLL 44GGLL ppoouurr lleess
 aapppplliiccaattiioonnss ddee bbaasseess ddee ddoonnnn��eess wweebb --

 AppGEN peut �tre t�l�-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 quatri�me g�n�ration
    ainsi qu'un g�n�rateur d'application pour produire des applications
    destin�es au World Wide Web (WWW). Ces applications sont
    typiquement utilis�es � travers l'internet ou dans le cadre d'un
    r�seau intranet d'entreprise. Les applications AppGEN sont
    implant�es 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, syst�me de gestion de base de donn�es relationnel

 Un serveur web compatible CGI tel que HTTPD du NCSA

 D'un compilateur ANSI C tel que GCC

 AppGEN est constitu� des ex�cutables Unix (Linux) suivants :-


 �  defgen, qui produit une application cadre, de base, � partir de la
    structure logique des donn�es. Ces applications sont capables
    d'ajouter, de mettre � jour, de supprimer et de rechercher les
    enregistrements d'une base de donn�es tout en conservant
    automatiquement l'int�grit� r�f�rentielle de cette base.


 �  appgen, le compilateur AppGEN qui compile le code source appgen en
    code source C CGI ex�cutable et en documents format�s HTML pr�ts
    pour leur d�ploiement sur un serveur web.


 �  dbf2sql, un utilitaire de conversion de fichiers .dbf compatibles
    dBase III en scripts SQL ex�cutables. Ce qui permet de migrer les
    donn�es stock�es dans la plupart des bases de donn�es 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 utilis�s, � l'ex�cution,
    par le syst�me. Et, naturellement, comme pour tout bon logiciel, la
    totalit� du code source est fournie.


 L'auteur, Andrew Whaley, peut �tre contact� �

 �  [email protected]

 1144..22..  WWWWWW WWeebb iinntteerrffaaccee ppoouurr PPoossttggrreessSSQQLL -- DDBBEENNGGIINNEE

 dbengine est une interface Web "plug 'n play" pour Postgres95 cr��e
 par Ingo Ciechowski. Il est � :

 �  <http://www.cis-computer.com/dbengine/ >

    AA pprrooppooss ddee DDBBEENNGGIINNEE :: dbengine est une interface entre le WWW et
    Postgres95 qui permet un acc�s simple � n'importe quelle base de
    donn�es 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 n�cessite la cr�ation d'un
 fichier de configuration pour chacune de vos bases de donn�es -- c'est
 un peu comme si vous deviez apprendre un nouveau m�ta-langage avant de
 pouvoir commencer � travailler.

 A la diff�rence 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 � cr�er de
 fichier de configuration pour chaque base de donn�es, et vous n'avez
 donc pas besoin de vous familiariser avec sa structure.  Cependant -
 au cas o� vous voudriez profiter de toutes les possibilit�s de
 dbengine, ce serait une bonne id�e de conna�tre le langage Perl.

 Le syst�me tout entier peut �tre configur� � l'aide de simples
 manipulations d'une base de donn�es compl�mentaire qui contient les
 informations de d�tail sur la mani�re de visualiser vos acc�s � la
 base de donn�es. Vous pouvez m�me sp�cifier des Champs Virtuels qui
 sont calcul�s en temps r�el avant d'�tre affich�s � l'�cran.

 LLiicceennccee ::

 dbengine est un logiciel libre selon les m�mes conditions que Perl.
 Lisez sa licence si vous n'�tes pas s�r de ce que vous pouvez ou ne
 pouvez pas faire.  La derni�re ligne indique que c'est une version
 plus gentille et plus mod�r�e 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!


 1155..  MMoodduullee AAppaacchhee WWeebbsseerrvveerr ppoouurr PPoossttggrreeSSQQLL -- NNeeooSSoofftt NNeeooWWeebbSSccrriipptt

 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 compliqu�s dans des fichiers HTML.

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

 NeoWebScript est un moyen rapide, s�re, facile � apprendre de cr�er
 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 ais�s, m�me pour un programmeur d�butant. Regardez
 comment NeoWebScript se d�fend 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 "Th�orie de fonctionnement" explique comment NeoWebScript
 fonctionne, celui d'Installation est un guide pas � pas des op�rations
 � effectuer. Le guide de Gestion traite de la mani�re de configurer et
 de faire fonctionner le serveur, celui de Tests permet de v�rifier le
 fonctionnement correct de NeoWebScript, enfin, celui de Maintenance
 traite des probl�mes 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 compl�te quand vous vous enregistrerez pour
 t�l�-charger le logiciel, mais il en co�te $ 99 si vous d�sirez
 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 r�dacteurs
 techniques.

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

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

 "Tcl/Tk permet aux d�veloppeurs de logiciels de r�aliser un travail
 dix fois plus rapidement qu'avec des outils bas�s sur C ou C++. C'est
 aussi un grand langage de synth�se permettant de faire travailler
 ensemble des applications existantes en les rendant plus graphiques et
 orient�es Internet."

 Karl Lehenbauer, Fondateur et Directeur Technique de NeoSoft, a
 particip� au d�veloppement de Tcl/Tk d�s le tout d�but. 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

 1155..11..  HHEEIITTMMLL,, eexxtteennssiioonn,, cc��tt�� sseerrvveeuurr ddee HHTTMMLL eett llaannggaaggee 44GGLL ppoouurr
 PPoossttggrreeSSQQLL

 Heitml est un autre outil d'interfa�age de postgres avec le monde du
 world wide web.  Pour plus de d�tails 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 [email protected]

 �  Heitml site web principal  <http://www.heitml.com>

 �  Heitml site web secondaire  <http://www.h-e-i.deom>

 Heitml est � la fois une extension, c�t� serveur, de HTML et un
 langage de la quatri�me g�n�ration (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 quatri�me g�n�ration complet permettant aux Applications utilisant
 le web d'interagir avec des donn�es stock�es dans des bases de donn�es
 SQL, sans m�riter l'�criture de scripts CGI complexes.

 heitml �tend HTML c�t� serveur, convertissant de mani�re dynamique les
 fichiers ".hei" au format HTML et ainsi, les rendant compatibles avec
 n'importe quel butineur web. Il englobe la syntaxe simple et famili�re
 de HTML et apporte un large assortiment de Balises et de Biblioth�ques
 pr�-d�velopp�es pour prendre en charge les t�ches qui auparavant
 n�cessitaient CGI. De m�me que XML, heitml permet l'utilisation de
 balises d�finies par l'utilisateur. Avec heitml les marqueurs d�finis
 par l'utilisateur peuvent �tre traduits en HTML et envoy�s � 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 acc�s aux bases de
 donn�es SQL ou cr�er des applications web compl�tes. On peut cr�er des
 Compteurs, des bases de donn�es d'inscriptions, des formulaires de
 recherche, des formulaires de courrier �lectronique ou des menus
 hi�rarchis�s en utilisant simplement des Balises de style HTML
 pr�-d�velopp�es que l'on trouve dans les nombreuses Biblioth�ques de
 Composants.

 Pour les programmeurs, heitml inclut un langage de quatri�me
 g�n�ration complet en HTML


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




 plus un �valuateur d'expression puissant pour les types de donn�es
 entiers, r�els, bool�ens cha�ne de caract�res et tuple. Les tuples ont
 une r�f�rence s�mantique comme dans les langages orient�s objets mod�
 ernes et sont stock�s sur un tas. Les variables heitml y compris
 toutes les structures de donn�es complexes stock�es sur le tas conser�
 vent leur valeur de page en page par l'utilisation du Mode Session. Il
 vous est possible de d�finir vos propres balises ou vos balises
 d'environnement et m�me de red�finir les balises HTML.

 Avec heitml il devient possible de

 - - - d�velopper des Sites Web de mani�re structur�e et modulaire,
 tout en r�duisant de fa�on drastique la surcharge due � la
 maintenance.

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

 - - - de visualiser le contenu de bases de donn�es SQL sans autre
 programmation que l'utilisation de notre biblioth�que de Balises
 pr�-d�finies "dba".

 - - - de d�velopper des applications de bases de donn�es 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 particuli�rement 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 donn�es yard sont
 support�s. heitml tourne sous Linux, BSDi, Solaris et SunOS, de m�me
 que sous Windows NT avec CGI, ISAPI et ODBC et Windows 95.

 heitml (sous linux) est libre pour la recherche, et pour une
 utilisation priv�e et non commerciale. Les Sites Web commerciaux
 doivent payer une licence. La version totalement op�rationnelle de
 heitml est disponible pour une p�riode d'essai et peut �tre
 t�l�-charg� librement. (Notez, cependant, que chaque page Web ".hei"
 que vous d�velopperez affichera un message indiquant qu'il s'agit
 d'une version � usage non commerciale. Apr�s enregistrement, vous
 recevrez une cl� pour effacer ce message sans avoir � r�installer le
 programme.)

 Les nouvelles fonctionnalit�s de la version 1.2 sont

 - - - Biblioth�que de Composants pour des Formulaires de Recherche
 dans un Base de Donn�es, menus hi�rarchis�s d'ouverture et de
 fermeture, formulaires de courrier �lectronique

 - - - Le Mode Session a �t� re-con�u et am�lior� pour conserver toutes
 les variables (y compris le tas tout entier) au travers des
 diff�rentes pages. Cela signifie que les donn�es, de n'importe quelle
 taille sont conserv�es � l'int�rieur d'une session. Ceci offre
 l'opportunit� d'un champ plus large pour cr�er de nouvelles
 applications, e.g. stockage complet des r�sultats d'une interrogation
 dans la m�moire de la session.

 - - - Les instructions d'installation, la documentation et les
 biblioth�ques d'exemples ont �t� augment�es de mani�re significative,
 un cours d'auto-formation a �t� ajout�

 - - - Des balises pour ex�cuter des commandes shell et pour envoyer
 des courriers �lectronique ont �t� ajout�es

 - - - 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 fa�on intuitive. En cas d'erreur � l'ex�cution,
 toutes les structures de donn�es internes sont affich�es dans le
 butineur en indiquant et pr�servant leurs positions dans le code
 source original.

 - - - Diverses nouvelles variables serveur et fonctions int�gr�es ont
 �t� ajout�es

 - - - En mode production, heitml collecte maintenant des informations
 compl�tes sur les erreurs survenues lors de l'acc�s, par des
 utilisateurs, � votre site.


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

 heitml (prononcer "H-ail"-TML) �tend et augmente de fa�on
 significative les fonctionnalit�s de HTML gr�ce aux balises
 d�finissables et aux possibilit�s compl�tes de programmation. Ce qui
 permet de cr�er simplement des applications au contenu dynamique et
 orient�es bases de donn�es 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 c�t�, comme
 utilisateur avanc� ou comme programmeur vous pouvez cr�er et
 programmer de puissantes biblioth�ques 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 g�n�re dynamiquement du HTML, aussi heitml est
 compatible avec les normes internet et avec n'importe quel butineur
 web. Il permet un acc�s total aux bases de donn�es tout en �vitant �
 l'utilisateur toute la complexit� inutile de CGI. heitml a �t�
 d�velopp� selon les plus r�cents crit�res en mati�re de construction
 de compilateurs et de syst�mes transactionnels.

 Les pages heitml sont d�velopp�es exactement de la m�me fa�on que les
 pages  HTML, � l'aide d'un �diteur de texte ou d'un �diteur HTML, et
 plac�es comme d'habitude sur le serveur web. Cependant, maintenant,
 les pages peuvent contenir des balises heitml dynamiques et des acc�s
 � des biblioth�ques de balises. Vous pouvez utiliser ces balises pour
 acc�der � une base de donn�es, pour cr�er un contenu dynamique, pour
 envoyer des courriers �lectronique, et m�me pour cr�er de puissantes
 applications telles que les bases de donn�es d'inscriptions ou de
 syst�mes d'achats.

 Les nouveaux venus � HTML et les programmeurs professionnels seront
 stup�faits de la vitesse et de la facilit�s avec lesquelles il peuvent
 concevoir des applications passionnantes telle que notre Livre d'Or
 Interactif sans n�cessiter la complexit� et l'apprentissage difficiles
 des scripts CGI, simplement en utilisant les outils fournis dans notre
 biblioth�que dba.

 heitml est accompagn� d'un large �ventail de biblioth�ques de balises,
 pour cr�er des livres d'or, des applications de maintenance de bases
 de donn�es, des formulaires puissants de courrier �lectronique ou de
 structuration de votre site web � l'aide de menus hi�rarchiques. Ces
 outils sont pr�ts � �tre utilis�s, il suffit simplement d'ajouter les
 balises correspondantes � votre site web.

 En tant que programmeur exp�riment�, 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, proc�dures r�cursives et capacit�s de passage
 de param�tres �tendues, mais il apporte aussi des possibilit�s de
 tuples persistants dynamiques pour conserver automatiquement des
 donn�es de session de n'importe quelle taille.

 1155..22..  SSeerrvveeuurr WWeebb AAmmeerriiccaa OOnn--lliinnee AAOOLL ppoouurr PPoossttggrreeSSQQLL

 Le serveur web commercial gratuit, AOLserver version 2.3 supporte des
 connexions � la base de donn�es PostgreSQL version 6.2.1 et
 ult�rieure.  Pour des informations compl�mentaires consultez

 �  AOL Web Server  <http://www.aolserver.com>





 1155..33..  OOuuttiill SSyysstt��mmee ddee ssuuiivvii ddee PPrroobbll��mmee//PPrroojjeett ppoouurr PPoossttggrreeSSQQLL

 Se trouve � l'url :

 �  <http://www.homeport.org/~shevett/pts/>

 1155..44..  CCoonnvveerrssiioonn ddee ffiicchhiieerrss ddbbaassee ddbbff eenn ffiicchhiieerrss PPoossttggrreeSSQQLL

 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

 �  [email protected]

 Vous pouvez �galement utiliser une m�thode python pour lire des
 fichiers dbf et les charger dans une base de donn�es postgres.

 �  Voir  <http://www.python.org>

 1166..  OOuuttiill ddee CCoonncceeppttiioonn//IImmppll��mmeennttaattiioonn ppoouurr SSGGBBDD WWeebb ppoouurr PPoossttggrreeSSQQLL
 -- EEAARRPPWW


 �  <http://www.oswego.edu/Earp>

 �  <ftp://ftp.oswego.edu> in the directory 'pub/unix/earp'.

 1166..11..  EEAARRPP,, cc''eesstt qquuooii ??

 Le "Programme de R�ponse Facilement Ajustable" ("Easily Adjustable
 Response Program" - EARP) cr�� par David Dougherty.  EARP est un outil
 de Conception/Impl�mentation pour Base De Donn�es Web, r�alis� au-
 dessus du syst�me de gestion de base de donn�es PostgresSQL. Ses
 fonctionnalit�s comprennent:


 �  Un syst�me de conception visuel.

 �  Une interface d'envoi de courrier �lectronique. (pouvant prendre en
    charge le courrier entrant et sortant)

 �  Un M�canisme de S�curit� am�lior�.

 �  Un pilote cgi.

 1166..22..  IImmppllaannttaattiioonn


 L'implantation principale de EARP consiste en un binaire CGI qui
 s'ex�cute sous le d�mon http pour fournir l'acc�s au serveur de base
 de donn�es. Tous les outils de conception sont int�gr�s dans le
 pilote, aucune conception ne se fait sur le web. Les outils eux-m�mes
 requi�rent un navigateur graphique, la compatibilit� des objets con�us
 avec ces outils est ind�pendante de l'implantation, elle ne d�pend
 uniquement que des pr�f�rences de conception individuelles.




 1166..33..  CCee ddoonntt vvoouuss aavveezz bbeessooiinn ppoouurr ffaaiirree ffoonnccttiioonnnneerr EEAARRPP


 EARP est sens� fonctionner sur une grande vari�t� 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� con�ue au-dessus de la
    version de libpq livr�e avec PostgreSQL v1.01/1.02.  Si vous
    utilisez une version plus r�cente de Postgres, vous devez vous
    attendre � ce que le programme n�cessite quelques modifications
    pour fonctionner correctement. Dans la version de d�veloppement
    (Earp 2.0), la prise en charge de libpq est en cours de prise en
    compte en tant que module.

 1166..44..  CCoommmmeenntt ffoonnccttiioonnnnee--tt--iill??


 Une des fonctionnalit�s principales de EARP est d'utiliser une
 approche orient�e objet pour produire des pages html qui s'interfacent
 � la base de donn�es. La plupart des pages sont constitu�es de
 plusieurs objets. Chaque objet est produit par une sorte d'outil et
 re�oit un nom, les objets sont alors li�s ensembles et appel�s en
 s�quence par l'outil de gestion de pages.  Les objets sont �galement
 r�utilisables � l'int�rieur de plusieurs pages. Il existe des outils
 de base pour HTML, pour les Requ�tes, pour la saisie dans des
 formulaires, le formatage variable des requ�tes et des objets en
 entr�e, ainsi que pour lier des objets pour en former de nouveaux.  On
 trouve �galement des outils plus avanc�s tels que l'outil de courrier
 �lectronique et l'outil de cr�ation de requ�tes en parall�le.

 La gestion perfectionn�e de la s�curit� est une des autres
 fonctionnalit�s de EARP.  L'acc�s aux diff�rentes zones du syst�me
 EARP peut �tre limit� par une grande vari�t� de moyens. Pour faciliter
 cette s�curit� perfectionn�e, EARP effectue des contr�les � chaque
 connexion au syst�me, et d�termine � quels "ids" et "groups"
 appartient l'agent qui se connecte. Les acc�s aux zones sont d�finis
 s�par�ment, et la combinaison des deux permet de d�cider si l'acc�s �
 une certaine zone de Earp est autoris�. De plus , tout ce qui est
 requis pour r�aliser les fonctionnalit�s de s�curit� se trouve dans un
 serveur http qui effectue une authentification de l'utilisateur
 minimale (ou meilleure).



 1166..55..  OO�� ppuuiiss--jjee llee ttrroouuvveerr??


 EARP est disponible via un ftp anonyme � :

 �  <ftp://ftp.oswego.edu> in the directory 'pub/unix/earp'.

 1177..  PPHHPP PPrr��--pprroocceesssseeuurr HHyyppeerrtteexxttee -- LLaannggaaggee ddee ssccrriipptt cc��tt�� sseerrvveeuurr,,
 aavveecc HHTTMMLL iinntt��ggrr��,, ppoouurr PPoossttggrreeSSQQLL

 L'outil d'interfa�age WWW se trouve � :

 �  <http://www.php.net>

 �  <http://www.vex.net/php>

    PHP poss�de �galement un compilateur appel� Zend qui am�liore
    grandement les performances.  En premier lieu, pendant le
    d�veloppement, les tests et la mise au point, vous �crivez votre
    application en utilisant le langage de script PHP.  Une fois que le
    projet est pr�t � �tre d�ploy�, vous utilisez le compilateur Zend
    pour compiler le script PHP et cr�er un ex�cutable qui tournera
    tr�s 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 � :

 �  [email protected]

    PHP 3 est un langage de script c�t� serveur, avec langage HTML
    int�gr�.  Il vous permet d'�crire des scripts simples directement
    dans vos fichiers .HTML � la mani�re JavaScript, sauf que, � la
    diff�rence de JavaScript, PHP 3 n'est pas d�pendant du butineur
    utilis�. JavaScript est un langage, c�t� client, avec HTML int�gr�
    alors que PHP 3 est un langage c�t� 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 syst�mes d'exploitation support�s, et vous jetterez
    probablement un oeil sur LiveWire Pro. Si vous pr�f�rez un logiciel
    libre, �voluant rapidement, qui est disponible avec la totalit� de
    son code source, vous appr�cierez probablement PHP 3.

 1177..11..  FFoonnccttiioonnnnaalliitt��ss pprriinncciippaalleess

 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 apport�s par ce m�canisme. Comme module Apache, PHP 3
 devient une alternative extr�mement puissante et brillante � la
 programmation CGI.


 �  Enregistrement des acc�s Avec les possibilit�s d'enregistrement des
    acc�s de PHP 3, les utilisateurs peuvent entretenir leur propre
    compteur d'acc�s et l'enregistrer. Il n'utilise en aucune fa�on les
    fichiers de d'enregistrement des connexions du syst�me central, et
    il permet un suivi des acc�s en temps r�el. Le Script du
    Visualisateur de Connexions fournit un r�sum� rapide des acc�s � un
    ensemble de pages poss�d�es par un utilisateur individuel. De plus,
    le paquetage peut �tre configur� pour g�n�rer un pied de page, sur
    chaque page, qui montre l'information sur les acc�s. Regardez au
    bas de cette page pour en avoir un exemple.

 �  Contr�le d'acc�s Un �cran de configuration int�gr�, bas� sur le
    web, permet la configuration du contr�le des acc�s. Il est possible
    de cr�er des r�gles d'acc�s pour toutes ou quelques unes des pages
    web poss�d�es par une certaine personne qui met diverses
    restrictions sur qui peut voir ces pages et comment elles seront
    vues.  Les pages peuvent �tre prot�g�es par un mot de passe,
    compl�tement interdites, � connexion d�sactiv�e et l'acc�s bas� sur
    le domaine du client, le butineur, l'adresse de courrier
    �lectronique ou m�me le document auquel on se r�f�re.

 �  Support de Postgres Postgres est un SGBDR (RDBMS) avanc� libre. PHP
    3 supporte les requ�tes Postgres95 et PostgreSQL SQL incluses
    directement dans les fichiers .html.


 �  RFC-1867 Support du t�l�-chargement de fichier Le t�l�-chargement
    de fichier est une nouvelle fonctionnalit� de Netscape 2.0.  Il
    permet aux utilisateurs de t�l�-charger des fichiers vers le
    serveur web.  PHP 3 r�alise le d�codage Mime r�el pour faire ce
    travail et fournit aussi le cadre additionnel pour faire quelque
    chose d'utile avec le fichier t�l�-charg� une fois que celui-ci a
    �t� re�u.

 �  Contr�le d'authentification bas� sur HTTP PHP 3 peut �tre utilis�
    pour cr�er des m�canismes d'authentification personnalis�s bas�s
    sur HTTP pour le serveur web Apache.

 �  Variables, Tableaux, Tableaux associatifs PHP 3 supporte des
    variables typ�es, des tableaux et m�me des tableaux associatifs �
    la Perl. Ils peuvent �tre pass�s d'une page web � l'autre en
    utilisant les m�thodes GET ou POST.

 �  Conditions, Boucles Tant que (While) PHP 3 poss�de un langage de
    script aux fonctionnalit�s compl�tes 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
    contr�ler l'ordre logique et la mani�re dont les pages html doivent
    �tre affich�es.

 �  Expressions R�guli�res �tendues Les expressions r�guli�res sont
    tr�s utilis�es pour le filtrage, le remplacement de s�quences et
    les manipulations g�n�rales de cha�nes de caract�res. PHP 3
    supporte toutes les op�rations communes sur les expressions
    r�guli�res.

 �  Contr�le de l'En-t�te HTTP brute La possibilit� d'envoyer � partir
    de pages web des en-t�tes HTTP brutes personnalis�es en fonction
    d'une condition est essentielle pour cr�er un site web de haut
    niveau. Un usage fr�quent est l'envoi d'un emplacement: en-t�te URL
    pour Rediriger le client appelant vers une autre URL.  Il peut
    aussi �tre utilis� pour stopper le stockage ou manipuler la
    derni�re mise � jour de l'en-t�te de pages.

 �  Cr�ation d'images KIF � la vol�e PHP 3 prend en compte la
    biblioth�que d'image GD de Thomas Boutell ce qui offre la
    possibilit� de g�n�rer des images GIF � la vol�e.

 �  Prise en charge du mode s�curit� ("Safe Mode") ISP PHP 3 prend en
    charge un "Mode de S�curit�" exceptionnel qui permet d'avoir de
    multiples utilisateurs ex�cutant des scripts PHP en toute s�curit�
    sur le m�me serveur.

 �  C'est Libre!  Pour finir, et c'est un point essentiel. Le paquetage
    est enti�rement 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 d�taill�s.

 1177..22..  CCrr��ddiittss


 * De grandes parties de ce code ont �t� d�velopp�es � et pour
 l'universit� de Toronto. De grands Mercis � Lee Oattes du D�partement
 de D�veloppement des R�seaux � l'universit� pour ses critiques
 constructives permanentes.

 * Le code de prise en charge de Postgres95 a �t� �crit par Adam
 Sussman

 �  [email protected]

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

 1177..33..  PPHHPP 33 -- BBrreeff HHiissttoorriiqquuee


 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�
 envisag�e. 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 requ�tes SQL dans des pages web a
 �t� �crit. C'�tait fondamentalement un autre petit programme enveloppe
 CGI qui analysait les requ�tes SQL et facilitait la cr�ation de
 formulaires et de tables bas�s sur ces requ�tes. Cet outil fut appel�
 FI "Interpr�teur de Formulaire" (Form Interpreter).

 La version 2.0 PHP/FI est une r��criture compl�te de ces deux
 paquetages combin�s pour former un simple programme. il a maintenant
 �volu� au point de devenir un simple langage de programmation int�gr�
 dans les fichiers HTML.  L'acronyme original, PHP, lui est rest�. Il
 n'est plus r�ellement 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'ins�rer de simples scripts directement dans vos fichiers HTML.  Ceci
 am�liore les performances globales de vos pages web puisque la
 surcharge due au lancement de processus Perl successifs a �t�
 �limin�e. La gestion de larges sites web a �galement �t� facilit�e en
 pla�ant tous les composants d'une page web dans un fichier html
 unique. En incluant le support de diff�rentes bases de donn�es, il
 devient trivial de d�velopper des pages web mettant en oeuvre des
 bases de donn�es. Nombreux sont ceux qui trouvent que cette
 int�gration est plus facile � g�rer que d'essayer de cr�er des
 fichiers HTML et CGI s�par�s.

 Tout au long de cette documentation, toute r�f�rence � PHP, FI ou
 PHP/FI traite de la m�me chose. La diff�rence entre PHP et FI est
 seulement conceptuelle. Les deux sont construits � partir de la m�me
 distribution du code source. Maintenant, PHP/FI a �t� renomm� PHP 3.

 1177..44..  BBoonn,, qquuee ppuuiiss--jjee ffaaiirree aavveecc PPHHPP//FFII??


 La premi�re chose que vous allez noter, si vous faites tourner une
 page par l'interm�diaire de PHP/FI, c'est qu'il ajoute un pied de page
 vous informant du nombre d'acc�s � votre page (si vous incluez le
 support des connexions d'acc�s dans votre binaire). C'est seulement un
 tout petit exemple de ce que PHP/FI peut faire pour vous. Il joue
 �galement le r�le tr�s important d'interpr�teur de formulaire cgi,
 d'o� la partie FI de son nom. Par exemple si vous cr�ez un formulaire
 dans l'une de vos pages web, vous avez besoin de quelque chose pour
 traiter l'information contenue dans ce formulaire. M�me si vous
 d�sirez 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 donn�es du formulaire
 pour en faire quelque chose.

 1177..55..  UUnn ssiimmppllee eexxeemmppllee


 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 cr�e 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, apr�s avoir vu comment utiliser ces variables, est
 de commencer � jouer avec quelques balises de gestion du d�roulement
 logique de vos pages. Par exemple, si vous voulez afficher diff�rents
 messages d�pendants de des informations entr�es par l'utilisateur,
 vous pouvez utiliser la logique si/alors (if/else). Dans notre exemple
 ci-dessus, on peut afficher diff�rentes choses d�pendant 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 tr�s vieux!<p>";
          else;
              echo "Hi $name.";
          endif;
      >


 PHP/FI fournit un langage de script tr�s 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
 compl�mentaires.

 Vous pouvez �galement utiliser PHP/FI pour configurer qui a le droit
 d'acc�der � vos pages. Ceci est effectu� en utilisant l'�cran de
 configuration inclus.  Par son interm�diaire , vous pourrez, par
 exemple, sp�cifier que seulement les gens appartenant � un certain
 domaine seront autoris�s � voir vos pages, vous pouvez �galement cr�er
 une r�gle prot�geant certaines pages par un mot de passe. Voir la
 section Contr�le d'Acc�s pour plus de d�tails.

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

 PHP/FI supporte le paquetage Postgres95. Il supporte les requ�tes 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
 requ�tes SQL incluses dans vos fichiers .HTML. Consultez la section
 Support mysql pour plus d'informations.

 1177..66..  RReeddiirreeccttiioonn CCGGII


 1177..66..11..  NNootteess AAppaacchhee 11..00..xx

 Une bonne mani�re 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 d�velopp� par Dave Andersen

 �  [email protected]

    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 extr�mement similaires. Ils diff�rent tr�s
    l�g�rement dans leur utilisation. Les deux ont �t� test�s et
    fonctionnent avec PHP/FI.

 Regardez dans la documentation Apache la mani�re d'ajouter un module.
 En g�n�ral 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 redirec�
 tion cgi il vous faudra soit cr�er 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 appr�tez � utiliser le module mod_actions.c il vous fau�
 dra ajouter la ligne suivante dans votre fichier srm.conf:


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




 Si vous vous appr�tez � 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 m�me temps mod_actions.c et mod_cgi_redi�
 rect.c .

 Une fois que vous avez l'un de ces modules de redirection cgi install�
 et configur� correctement, vous pouvez sp�cifier 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 r�pertoire sera automatiquement filtr�e
 par php si vous appelez votre fichier index index.phtml.

 1177..66..22..  HHTTTTPPDD NNeettssccaappee

 Vous pouvez rediriger automatiquement les requ�tes pour des fichiers
 ayant une extension donn�e de fa�on � 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.

 1177..66..33..  HHTTTTPPDD NNCCSSAA

 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.




 1177..77..  LLaanncceerr PPHHPP//FFII �� ppaarrttiirr ddee llaa lliiggnnee ddee ccoommmmaannddee


 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 cr�er des scripts PHP/FI autonomes en
 faisant ressembler la premi�re ligne de votre script � quelque chose
 comme :



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




 L'option "-q" supprime l'impression des en-t�tes HTTP. Vous pouvez
 vous passer de cette option si vous le d�sirez.

 1188..  IInntteerrffaaccee PPyytthhoonn ppoouurr PPoossttggrreeSSQQLL

 Python est un langage de script, interpr�t� et orient� objet.  Il est
 simple � utiliser (syntaxe l�g�re, instructions simples et sans
 d�tours ). Il poss�de de nombreuses extensions pour b�tir des
 interfaces utilisateurs ( GUI ), pour s'interfacer au WWW, etc. Un
 butineur de web intelligent ( � la HotJava ), est actuellement en
 cours de d�veloppement (novembre 1995), et cela devrait ouvrir de
 nombreuses portes aux programmeurs.  Le copyrightde Python est d�tenu
 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 biblioth�ques syst�me, � l'aide de code C est ais�, rendant
 Python facile � utiliser en cas de personnalisation. Python est un
 langage de script de tr�s haut niveau poss�dant 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'interfa�age � l'ensemble de widgets Tix pour Tk.

 PyGresSQL est un module Python qui s'interface � une base de donn�es
 PostgreSQL. Il int�gre la biblioth�que de requ�tes de PostgreSQL pour
 permettre l'utilisation ais�e des possibilit�s 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 [email protected]

 �  Pascal Andre [email protected]

 �  Pascal Andre [email protected]



 1188..11..  OO�� llee ttrroouuvveerr PPyyGGrreess ??


 Les sites d'accueil des diff�rents 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 r�pertoires
    contrib des sites Python et PostgresSQL.

 1188..22..  IInnffoorrmmaattiioonn eett ssuuppppoorrtt


 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 � [email protected] en mettant la
    ligne "subscribe pygresql name@domain" dans le corps du message et
    en rempla�ant "name@domain" par votre propre adresse �lectronique.

 �  Forum de discussion pour Python :     newsgroup comp.lang.python

 �  PyGreSQL :   contacter Andre � [email protected] pour les comptes-
    rendus d'erreurs, id�es, remarques

 1199..  PPaasssseerreellllee eennttrree PPoossttggrreeSSQQLL eett WWWWWW -- WWDDBB--PP9955

 WDB-P95 - Une interface Web interface aux bases de donn�es PostgresSQL
 a �t� cr��e 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 : [email protected]

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

 Vous pouvez essayer ma Bande CASI et ma Requ�te d'Image. Vous pouvez
 jeter un coup d'oeil au Fichier de D�finition de Formulaire (FDF) qui
 est utilis� pour cr�er la Bande CASI et �galement la Requ�te d'Image,
 qui comprends une jointure (JOIN) de 2 tables.

 Cette version contient tous les fichiers n�cessaires pour installer et
 faire tourner WDB-P95 en tant qu'interface � vos bases de donn�es
 PostgresSQL. Le portage de ce syst�me pour une autre base de donn�es
 devrait �tre relativement facile - � condition qu'elle supporte le SQL
 standard et poss�de une interface Perl.

 1199..11..  LLee sseerrvveeuurr PPoossttggrreessSSQQLL,, ppggppeerrll,, eett hhttttppdd ddooiivveenntt--iillss rr��ssiiddeerr
 ssuurr llee mm��mmee hh��ttee??

 Non - Le serveur PostgresSQL n'a pas � �tre sur le m�me h�te. Comme
 WDB-P95 est appel� par le d�mon http, ils doivent r�sider sur le m�me
 h�te. - Et comme WDB-P95 a �t� �crit pour utiliser Pg.pm - pgperl doit
 �tre sur le m�me h�te �galement. Pgperl a �t� �crit en utilisant la
 biblioth�que libpq, donc, il sera capable d'acc�der � n'importe quel
 serveur Postgres95 n'importe o� sur le r�seau, 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 parenth�ses () repr�sentent les machines.


 Chaque machine peut �tre d'un type diff�rent : NT, SUN, HP, ... mais
 il faut que vous ayez la biblioth�que d'interface libpq pour le type
 de machine sur lequel  vous envisagez d'utiliser WDB-P95, puisqu'il
 vous faut compiler pgperl.  (Le syst�me a �t� con�u pour utiliser les
 tables HTML donc un client WWW r�cent est meilleur)


 2200..  IInntteerrffaacceess aauu llaannggaaggee ""CC"",, ""CC++++"",, EESSQQLL//CC eett OOpp��rraatteeuurrss ssuurr lleess
 bbiittss ppoouurr PPoossttggrreeSSQQLL


 2200..11..  IInntteerrffaaccee ""CC""

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


 2200..22..  ""CC++++"" iinntteerrffaaccee

 Elle est incluse dans la distribution et est nomm�e 'libpq++'.


 2200..33..  EESSQQLL//CC

 C'est un pr�-compilateur C int�gr� 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 cr�er des applications personnalis�es avec des
 possibilit�s de gestion de base de donn�es. ESQL/C pour PostgreSQL
 vous permet d'utiliser un langage de troisi�me g�n�ration avec lequel
 vous �tes familiaris� tout en profitant des avantages d'un Langage de
 Requ�tes Structur� (SQL).

 ESQL/C est compos� des �l�ments logiciels suivants:

 �  Les biblioth�ques ESQL/C de fonctions C fournissent les acc�s au
    serveur de base de donn�es.

 �  Les fichiers d'en-t�te ESQL/C apportent les d�finitions des
    structures de donn�es, 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
    ex�cutable.

    Il se trouve � :

 �  ESQL/C pour PostgreSQL est d�j� inclus dans la distribution.

 �  Site principal  <ftp://ftp.lysator.liu.se/pub/linus>

 �  Email : [email protected]


 2200..44..  OOpp��rraatteeuurrss ssuurr lleess bbiittss ppoouurr PPoossttggrreeSSQQLL

 Les op�rateurs sur les bits ont �t� �crits par Nicolas Moldavsky

 �  [email protected]

 Ce sont des fonctions "C" qui implantent les op�rateurs bit-par-bit
 (AND, OR, XOR, bit complement) dans pgsql. Si quelqu'un d�sire les
 utiliser, il peut les r�cup�rer par ftp anonyme de


 �  <ftp://ftp.overnet.com.ar/pub/utils/linux/bitpgsql.tgz>

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

 2211..  LLeess CCooddeess KKaannjjii JJaappoonnaaiiss ppoouurr PPoossttggrreeSSQQLL

 Sont tr�s utiles pour les Japonais.  On les trouvera au site suivant :

 �  <ftp://ftp.sra.co.jp/pub/cmd/postgres/>

 2222..  PPoorrttaaggee ddee PPoossttggrreeSSQQLL ppoouurr WWiinnddoowwss 9955//WWiinnddoowwss NNTT

 Un portage pour Windows 95/Windows NT est en cours de r�alisation.  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>

    R�cup�rez-y le fichier cdk.exe (fichier auto-extractible pour gnu-
    win32)

 Le portage peut �galement �tre r�alis� en utilisant  l'outil
 "Emulateur Unix sous NT" (Unix-Emulator on NT) suivant de

 �  <http://www.softway.com>

 2233..  MMaaiilliinngg LLiissttss


 2233..11..  OObbtteenniirr uunn ccoommppttee ee--mmaaiill GGrraattuuiitt

 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� compl�mentaire de cr�ation d'un classeur
    s�par� pour les courriers �lectroniques PostgreSQL e-mails, ainsi
    votre e-mail habituel ne sera pas pollu�. S�lectionnez le menu
    Email- > Options- > Filters et prenez un classeur s�par� pour e-
    mail.  Avec ce compte e-mail vous pouvez acc�der au courrier de
    n'importe o� dans le monde � partir du moment o� vous avez acc�s �
    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 s�par�. De cette fa�on, vous �viterez de voir votre
 courrier pollu�.

 2233..22..  LLiissttee ddee DDiiffffuussiioonn AAnnggllaaiissee

 Regardez les Titres des Listes de Diffusion sur la page web principale
 � :

 �  <http://www.postgresql.org/>

 �  Envoyez vos questions par courrier �lectronique �: pgsql-
    [email protected]

 �  D�veloppeurs [email protected]

 �  Questions sp�cifiques � un portage [email protected]

 �  Questions concernant la documentation [email protected]

    Vous recevrez une r�ponse, par courrier �lectronique, dans la
    journ�e qui suit!!

 Vous pouvez �galement vous inscrire aux listes de diffusion.  Pour
 vous inscrire ou vous radier d'une liste, envoyez un courrier �

 �  [email protected]

 �  [email protected]

 �  [email protected]

 �  [email protected]

    Le corps du message doit uniquement contenir la simple ligne

 subscribe

 (ou)

 unsubscribe

 2233..33..  AArrcchhiivvee ddeess lliisstteess ddee ddiiffffuussiioonn

 Il y a aussi des listes de diffusion qui sont archiv�es 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 r�pertoire /pub/majordomo


 2233..44..  LLiissttee ddee DDiiffffuussiioonn EEssppaaggnnoollee

 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 � :

 �  [email protected]

    Le corps du message doit contenir la simple ligne :

 inscripcion pgsql-ayuda

 2244..  LLiivvrreess eett DDooccuummeennttaattiioonnss


 2244..11..  GGuuiiddeess uuttiilliissaatteeuurr eett MMaannuueellss

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


 �  Le 'Guide Utilisateur' pour PostgreSQL,

 �  Le 'Guide de R�alisation' d�taillant 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.

 2244..22..  DDooccuummeennttaattiioonn eenn lliiggnnee


 �  Liste et description des types de donn�es et des op�rateurs par
    d�faut


      Fait partie des commandes PSQL de la version 6.5.2.




 �  Liste des mots-cl�s SQL support�s


      Il y a un script dans le r�pertoire /tools qui fait cela




 �  Liste des instructions support�es -


      Utilisez la commande psql \h




 �  Concepts de base des bases de donn�es relationnelles sous
    PostgreSQL (en impl�mentation) et des tonnes d'exemples en ligne
    (requ�tes) -


      Consultez les tests de r�gression dans src/test. L�, vous y trouver les
      r�pertoires regress/sql et suite/*.sql.





 �  Didacticiel pour PostgreSQL.



      Les scripts du didacticiel SQL sont dans le r�pertoire src/tutorial





 Voir �galement "Didacticiel SQL pour les d�butants" dans l'appendice B
 de ce document ``''

 2244..33..  DDooccuummeennttss ddee RR��ff��rreennccee:: OOuuvvrraaggeess ddee rr��ff��rreennccee uuttiilleess ::


 �  "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. Tr�s
      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, (R�f�rence Imm�diate 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 Syst�mes de Bases de Donn�es) (6th Edition), Addison-Wesley,
    1995, ISBN 0-201-82458-2


      Ce livre est la Bible des Syst�mes de Gestion de Bases de Donn�es.
      Le livre d�taille la normalisation, SQL, la r�cup�ration, la concurrence,
      la s�curit�, l'int�grit�, les extensions au mod�le relationnel original,
      des sujets actuels tels que  les syst�mes client/serveur et le(s) mod�le(s)
      Orient�(s) Objet. De nombreuses r�f�rences sont donn�es pour des lectures
      compl�mentaires. Recommand� pour la plupart des utilisateurs.





 �  Stefan Stanczyk, "Theory and Practice of Relational Databases",
    (Th�orie et pratique des bases de Donn�es Relationnelles) UCL Press
    Ltd, 1990, ISBN 1-857-28232-9


      Ce livre d�taille la th�orie des bases de donn�es relationnelles, l'alg�bre
      relationnelle, le calcul et la normalisation. Mais il ne couvre pas les sujets
      du mode r�el 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 Syst�mes de Bases de Donn�es), Morgan Kaufmann, 1988, ISBN
    0-934613-65-6


      Ce livre est un recueil de papiers, sur les bases de donn�es, qui ont �t�
      publi�s sur plusieurs ann�es. Il n'est pas pour l'utilisateur occasionnel
      mais, c'est r�ellement une r�f�rence pour les �tudiants en classes sup�rieures
      (troisi�me cycle) ou pour les d�veloppeurs de syst�mes de bases de donn�es.





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


      Ce livre est un recueil de papiers, sur les bases de donn�es, qui ont �t�
      publi�s sur plusieurs ann�es. Il n'est pas pour l'utilisateur occasionnel
      mais c'est r�ellement une r�f�rence pour les �tudiants en classes
      sup�rieures (troisi�me cycle) ou pour les d�veloppeurs de syst�mes de
      bases de donn�es.


 �  Nick Ryan and Dan Smith, "Database Systems Engineering",
    (Ing�nierie de Syst�mes de Bases de Donn�es), International Thomson
    Computer Press, 1995, ISBN 1-85032-115-9


      Ce livre traite des d�tails des m�thodes d'acc�s, et des technique de stockage.





 �  Bipin C. Desai, "An introduction to Database Systems", (Une
    introduction aux syst�mes de bases de donn�es) West Publishing Co.,
    1990, ISBN 0-314-66771-7


      Il n'est pas pour l'utilisateur occasionnel mais c'est r�ellement une
      r�f�rence pour les �tudiants en classes sup�rieures (troisi�me cycle)
      ou pour les d�veloppeurs de syst�mes de bases de donn�es.





 �  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" (Syst�mes de Gestion de Bases de Donn�es :
    comprendre et appliquer les bases de donn�es)


      Technology
      QED and John Wiley
      1991





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


      Pr�sente les exigences de construction d'applications de base de donn�es
      client/server par l'interm�diaire de m�ta-mod�les d'entrep�t et l'utilisation
      de la norme SQL ANSI 1993





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


 2244..44..  DDooccuummeennttss ddee SSpp��cciiffiiccaattiioonnss AANNSSII//IISSOO SSQQLL -- SSQQLL 11999922,, SSQQLL 11999988

 Les documents de Sp�cifications ANSI/ISO SQL sont situ�s � 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

 �  Sp�cifications ANSI/ISO SQL
    <http://www.contrib.andrew.cmu.edu/~shadow/sql.html> Vous trouverez
    la R�f�rence SQL ici.

 2244..55..  SSyynnttaaxxee ddee ll''AANNSSII//IISSOO SSQQLL 11999922

 Voir l'Appendice A de ce document ``''

 2244..66..  SSyynnttaaxxee ddee ll''AANNSSII//IISSOO SSQQLL 11999988

 Les sp�cifications de SQL 1998 (SQL 3) sont encore en cours de
 d�veloppement.  Voir le paragraphe 'Electronic Access to the SQL3
 Working Draft' de ce document document � ``''

 2244..77..  DDiiddaaccttiicciieell SSQQLL ppoouurr lleess dd��bbuuttaannttss

 Voir l'Appendice B de ce document ``''

 2244..88..  EExxtteennssiioonn TTeemmppoorreellllee �� SSQQLL9922


 �  Document pour l'Extension Temporelle � SQL-92
    <ftp://FTP.cs.arizona.edu/tsql/tsql2/>

 �  Sp�cification SQL-3 Temporelle
    <ftp://FTP.cs.arizona.edu/tsql/tsql2/sql3/>

 Ce r�pertoire contient les sp�cifications pour une extension
 temporelle au langage SQL-92 standard. Ce nouveau langage est appel�
 TSQL2.

 Les sp�cifications du langage pr�sent�es ici correspondent � la
 version finale du langage.

 La correspondance doit �tre adress�e au bureau du Comit� de Conception
 du Langage TSQL2, Richard T.Snodgrass, Department of Computer Science,
 University of Arizona, Tucson, AZ 85721,

 �  [email protected]

    Les affiliations et les adresses �lectroniques des membres du
    Comit� de Conception du langage TSQL2 peuvent �tre trouv�es, dans
    un chapitre s�par�, � la fin des sp�cifications du langage.

 Le contenu du r�pertoire est le suivant :

 spec.dvi,.ps    Sp�cifications du langage TSQL2, publi� en Septembre,
 1994

 bookspec.ps     Sp�cifications 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 comit�s ANSI et
 ISO SQL3.

 Un ensemble de commentaires, associ�s aux sp�cifications du langage,
 parle des d�cisions de conception, fournit des exemples, et traite de
 la fa�on 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 diff�rent: fournir des
 exemples de syntaxe, expliquer les nombreuses d�cisions prises durant
 la conception du langage, et comparer TSQL2 aux nombreuses autres
 propositions de langage faites au cours des quinze derni�res ann�es.
 Il faut insister sur le fait que ces commentaires ne font pas partie
 int�grante des sp�cifications du langage TSQL2 en lui-m�me, mais
 plut�t qu'elles le compl�tent et constituent un apport. Le mot de la
 fin est donn� par les sp�cifications de TSQL2 proprement dit.

 Les commentaires, ainsi que les sp�cifications du langage, plusieurs
 index, et d'autres �l�ments de support ont �t� publi�s dans un livre :

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

 Les commentaires d'�valuation sont donn�s sous forme abr�g�e dans le
 livre; La totalit� des commentaires est fournie dans le fichier
 eval.ps situ� dans ce r�pertoire

 Le fichier tl2tsql2.pl est un programme prolog qui traduit la logique
 temporelle autoris�e en TSQL2. Ce programme a �t� �crit par Michael
 Boehlen

 �  [email protected]

    On peut le contacter pour obtenir un papier qui d�crit 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).

 2244..99..  PPaarrttiiee 00 -- AAccqquuiissiittiioonn ddeess DDooccuummeennttss IISSOO//AANNSSII SSQQLL

 Ce document vous explique comment acqu�rir (l�galement) une copie de
 la norme SQL-92 et comment acqu�rir une copie du Brouillon de Travail
 du SQL3 "actuel".

 La norme ANSI est prot�g�e 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-
 t�te 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 r�daction, mais il
 devrait l'�tre entre fin Mars et d�but Mai, 1993). Il devrait co�ter
 US$ 225.00.

 Si vous achetez l'un ou l'autre document � l'ANSI, il y aura un
 suppl�ment de 7% pour le traitement (soit environ US$ 9.10). Les frais
 d'envoi � l'�tranger accro�tront sans doute le co�t. ANSI exige des
 soci�t�s un document de commande �crit pour chaque commande; d'un
 autre c�t�, vous pouvez envoyer un ch�que tir� sur une banque US en
 dollars US, qu'ils encaisseront avant d'exp�dier 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
 repr�sentations nationales locales (entit�s 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 repr�sentations nationales,
 avec leurs adresses, sont disponibles de l'ANSI ou d'autres entit�s
 nationales.  Ils sont aussi disponibles � l'ISO :


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




 Si vous pr�f�rez commander la norme d'une fa�on plus facile et plus
 rapide, il vous faudra payer pour ce privil�ge. Vous pouvez commander
 le ISO/IEC 9075:1992, Information Technology - Database Languages -
 SQL, � :


           Global Engineering Documents
           2805 McGaw Ave
           Irvine, CA 92714 (USA)
           USA
           T�l�phone (accessible de partout): +1.714.261.1455
           T�l�phone (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
 suppl�ment.  Ils peuvent vous envoyer un document tr�s rapidement et
 acceptent m�me les "plus grandes cartes de cr�dit". Global n'a pas
 encore la version ANSI pas plus qu'un prix ou qu'une date pr�visible
 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
 secr�tariat de l'ANSI X3, CBEMA (Computer and Business Equipment
 Manufacturers Association). Leur objectif est d'avoir la "plus
 r�cente" 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 contact�e par t�l�phone au +1.202.626.5738
 pour une demande de copie, bien qu'un courrier soit probablement plus
 courtois.

 Acc�s �lectronique au Document de Travail SQL3

 La plus r�cente version (� la date de r�daction) 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 r�pertoire , il y a de nombreux fichiers.  Ce sont des
 fichiers PostScript et "texte ordinaire" (pas tr�s bien format�s, mais
 lisibles sur un �cran sans logiciel sp�cifique).

 En g�n�ral, 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
 r�pertoire par FTP, nous avons ajout� un fichier ayant pour nom :


           ls




 dans le m�me r�pertoire.  Ce fichier (surprise!) contient une liste du
 r�pertoire.

 R�cup�rer les Fichiers Directement par Ftp

 Voici un exemple sur la fa�on d'utiliser FTP. Sp�cifiquement, il
 montre comment se connecter � gatekeeper.dec.com, aller au r�pertoire
 o� le document de base est gard� et � transf�rer ce document sur votre
 machine. Notez que votre machine doit pouvoir acc�der � 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 utilis�e pour s'assurer qu'aucuns bits ne
 seront supprim�s du (des) fichier(s) re�u(s). La commande 'get'
 r�cup�re un fichier � la fois.  Les commentaires dans le script ci-
 dessous sont plac�s 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 fonctionne �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 r�pertoire sous le nom x3h2-93-082.txt>




 R�cup�ration de Fichiers Sans Faire un ftp Direct

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

 [email protected]

 Le script suivant r�cup�rera la derni�re version PostScript du
 document SQL3 :


           reply [email protected]
           connect gatekeeper.dec.com anonymous
           binary
           compress




 Le script suivant r�cup�rera la derni�re version PostScript du docu�
 ment SQL3 :


           reply [email protected]
           connect gatekeeper.dec.com anonymous
           binary
           compress
           uuencode
           chdir /pub/standards/sql
           get x3h2-93-091.ps
           quit




 La premi�re ligne du script commande au serveur de vous retourner les
 fichiers demand�s; 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 s�par�s,
 "compress�s" et "uuencod�s". Si votre environnement ne dispose pas des
 outils pour reconstruire de tels fichiers, alors, il vous faudra
 r�cup�rer le fichier sous forme de texte pur en utilisant le script
 suivant:


           reply [email protected]
           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 r�cup�rer un fichier particulier, autre que x3h2-93-091.ps,
 remplacez simplement "x3h2-93-091.ps" par le nom du fichier d�sir�.
 Pour obtenir la liste de tous les fichiers disponibles dans un
 r�pertoire, remplacez "get x3h2-93-091.ps" par "dir".




 2244..1100..  PPaarrttiiee 11 -- EEttaatt AAccttuueell ddee ll''IISSOO//AANNSSII SSQQLL

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

 �tat Actuel

 Le d�veloppement pour am�liorer SQL afin d'en faire un langage complet
 pour la d�finition et la gestion d'objets persistants et complexes.
 Ceci comprend : les hi�rarchies de g�n�ralisation et de
 sp�cialisation, l'h�ritage multiple, les types de donn�es d�finies par
 l'utilisateur, les d�clencheurs et les assertions, le support des
 syst�mes � base de connaissances, les requ�tes r�cursives, et des
 outils compl�mentaires d'administration de donn�es. Cela inclue
 �galement la sp�cification des types de donn�es abstraits (ADTs), des
 identificateurs d'objets, des m�thodes, de l'h�ritage, du
 polymorphisme, de l'encapsulation et de tous les autres moyens
 normalement associ�s � 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 pr�vu) avec environ 900 commentaires. Fin
 Janvier, un comit� de r�daction traita un grand nombre de solutions
 aux probl�mes qui furent soit incluses avec les commentaires du vote
 ou soumises en tant que documents s�par�s. Depuis le comit� de
 r�daction DBL n'a pas pu traiter tous les commentaires et sa dur�e a
 �t� augment�e. La fin du comit� de r�daction est pr�vue pour la fin
 Juillet 1997, � Londres.


 A la suite du comit� de r�daction 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 r�daction du DBL, apr�s
 lesquels il y aura un vote IS et un tr�s rapide vote IS.

 Les proc�dures ISO ont chang� depuis SQL/92, et les comit�s SQL
 travaillent encore selon les r�gles du processus.

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

 En 1993, les comit�s de d�veloppement ANSI et ISO ont d�cid� de
 d'�clater le d�veloppement futur de SQL en une norme multi-parties.
 Ces parties sont :


 �  Partie 1: Structure Description non technique de la mani�re dont le
    document doit �tre structur�.

 �  Partie 2: Base Sp�cifications de base, incluant toutes les
    nouvelles fonctionnalit�s ADT.

 �  Partie 3: SQL/CLI Interface du niveau appel (Call Level Interface).

 �  Partie 4: SQL/PSM Sp�cifications des proc�dures enregistr�es

 �  Partie 5: SQL/Bindings SQL Dynamique et SQL Embedded SQL liens
    venant de SQL-92.

 �  Partie 6: SQL/XA Une sp�cialisation de l'interface populaire XA
    d�velopp�e par X/Open

 �  Partie 7:SQL/Temporal Ajoute les capacit�s li�es 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 trait�s
 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 d�finir une norme multi-media
    utilisant les possibilit�s de SQL3 ADT.

 �  Acc�s aux donn�es � distance (RDA)

 Comit�s et Processus de Standardisation

 Il y a effectivement de nombreux comit�s 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 comit�s qui se
 consacrent � SQL. Ces pays (habituellement) envoient des repr�sentants
 aux r�unions ISO/IEC JTC1/SC 21/WG3 DBL. Les pays qui participent
 activement au processus de normalisation ISO SQL sont :


 �  Australie

 �  Br�sil

 �  Canada

 �  France

 �  Allemagne

 �  Japon

 �  Cor�e

 �  Pays-Bas

 �  Angleterre

 �  �tats-Unis

 Validation NIST

 Les impl�mentations SQL sont valid�es (aux �tats-Unis) par le National
 Institute of Standards and Testing (NIST). Le NIST poss�de une suite
 de tests de validation pour le niveau de base SQL-92. Les d�tails
 exacts des exigences de la validation NIST sont d�finis comme un
 Federal Information Processing Standard (FIPS). Les exigences
 actuelles pour SQL sont d�finies dans le document FIPS 127-2. Les
 versions Postscript et Texte de ce document peuvent �tre obtenues au
 NIST. La Liste des Produits Valid�s � 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 r�f�rences aux autres normes. Les deux versions sont
 disponibles au :


           American National Standards Institute
           1430 Broadway
           New York, NY 10018
           USA
           T�l�phone (ventes): +1.212.642.4900




 En suppl�ment � la norme SQL-92, il y a maintenant un Technical Corri�
 gendum (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 suppl�ment � 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 donn�e par le norme elle-m�me.

 Standards connexes

 Un certain nombre d'autres normes pr�sentent de l'int�r�t pour la
 communaut� SQL. Cette section contient des pointeurs donnant des
 informations sur ces efforts. Ces pointeurs seront plus nombreux �
 mesure que des informations compl�mentaires seront disponibles sur le
 web.


 �  SQL Environnements (FIPS 193) - (Environnements SQL)

 �  Next Generation Repository Systems (X3H4) - (Syst�mes D�positaires
    de la Prochaine G�n�ration) Une version des Nouvelles appelant �
    une participation au "D�veloppement des Standards pour les Syst�mes
    D�positaires de la Prochaine G�n�ration."

 2244..1111..  PPaarrttiiee 22 -- FFoonnddeemmeennttss IISSOO//AANNSSII SSQQLL

 Une partie importante de l'effort pour SQL3 r�side dans le document de
 base SQL :


 �  Capacit�s de Base SQL/PSM (venant de SQL/PSM-92)

 �  Nouveaux types de donn�es

 �  D�clencheurs

 �  Sous-tables

 �  Types de Donn�es Abstraits (ADT)

 �  Capacit�s Orient�es Objets

 Il y a plusieurs pr�-requis pour les capacit�s orient�es objets :


 �  Capacit� de pouvoir d�finir des op�rations complexes

 �  Stockage des op�rations complexes dans la base de donn�es

 �  Appels de Proc�dures Externes � Quelques op�rations peuvent ne pas
    exister dans SQL ou peuvent n�cessiter des interactions externes

 Ces capacit�s sont d�finies comme faisant partie de SQL/PSM

 Une grande quantit� de travail est en cours de r�alisation pour
 affiner le mod�le objet SQL-3 et l'aligner sur le mod�le objet propos�
 par l'ODMG. Cet effort est d�crit dans les papiers X3H2 et ISO DBL :
 Accommoder SQL3 et ODMG. Une mise � jour r�cente 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 ann�es.


 �  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 g�n�re de nombreux commentaires

 �  Un second vote sera probablement n�cessaire

 �  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.

 2244..1122..  PPaarrttiiee 33 -- IInntteerrffaaccee dd''AAppppeell SSQQLL IISSOO//AANNSSII

 SQL/CLI est une interface de programmation d'appel pour les bases de
 donn�es SQL.  Il est con�u pour acc�der aux bases de donn�es � partir
 d'applications ferm�es.  CLI a, � l'origine, �t� cr�� par un sous-
 comit� du groupe SQL Access (SAG).  Les sp�cifications de SAG/CLI ont
 �t� publi�es, en 1992, en tant que sp�cifications Microsoft Open
 DataBase Connectivity (ODBC) en 1992. En 1993, le SAG a soumis le CLI
 aux comit�s 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 d�pendant de l'impl�mentation pour acc�der aux bases de
    donn�es SQL

 �  Des outils Client-serveur pour acc�der facilement � une base de
    donn�es au moyen de Biblioth�ques 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 fonctionnalit�s SQL3 �
    SQL/CLI

 2244..1133..  PPaarrttiiee 44 -- MMoodduulleess MM��mmoorriiss��ss PPeerrssiissttaannttss IISSOO//AANNSSII SSQQLL

 SQL/PSM �tend SQL en ajoutant :


 �  Des extensions de langage proc�dural

 �  Des proc�dures m�moris�es multi-instructions

 �  Des appels de proc�dures et de fonctions externes

 SQL/PSM apporte, en plus du fait d'�tre un bon outil de d�veloppement
 d'application, une base pour des fonctionnalit�s orient�es objet dans
 SQL3.

 Proc�dures m�moris�es et multi-instructions

 Multi-instructions et proc�dures m�moris�es offrent une grande vari�t�
 d'avantages dans un environnement client/serveur :


 �  Performance - Puisqu'une proc�dure m�moris�e peut effectuer de
    multiples instructions SQL, les interactions sur le r�seau, avec le
    client, sont r�duites.

 �  S�curit� - On peut donner � un utilisateur le droit d'appeler une
    proc�dure m�moris�e 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 proc�dure m�moris�e n'a pas � �tre
    r��crit ni re-test� pour chaque outil d'un client qui acc�de � la
    base de donn�es.

 �  Contr�le - Fournit un point unique de d�finition et de contr�le
    dans la logique de l'application.

 Extensions de Langage Proc�dural

 Le langage proc�dural ajoute la puissance d'un langage de
 programmation traditionnel � SQL gr�ce � des instructions de contr�le
 de flot et � d'autres constructions utilis�es en programmation.

 Instructions de contr�le 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 proc�dural comprennent d'autres
 constructions des langages de programmation :


 �  D�claration 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 proc�dures multi-instructions.

 Appels de Fonctions et de Proc�dures externes

 Une fonctionnalit� souvent mentionn�e dans la liste des souhaits pour
 de nombreuses base de donn�es et produits et qui est impl�ment�e dans
 quelques-uns, est la capacit� de pouvoir augmenter les fonctionnalit�s
 du logiciel de base de donn�es d'origine par des appels � des
 proc�dures externes �crites par les utilisateurs.


 �  Cela permet � un site ou a une application en particulier d'ajouter
    leurs propres fonctions base de donn�es

 �  Peuvent �tre utilis�es tout au long des applications bases de
    donn�es

 Le b�n�fice de cette capacit� est de donner acc�s, pour la base de
 donn�es (et, par l�, aux applications base de donn�es), � un riche
 ensemble de proc�dures et de fonctions trop nombreuses pour �tre
 d�finies 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 r�union de travail en mai 1996 n'a pas apport� de solution �
    tous les commentaires

 �  La poursuite de la r�union de travail du PSM est programm�e 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 d�signation 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 fonctionnalit�s de SQL3 est
    en bonne voie.



 2244..1144..  PPaarrttiiee 55 -- IISSOO//AANNSSII SSQQLL//LLiieennss

 Pour en faciliter l'acc�s, la description des liens avec le langage de
 programmation a �t� mise dans un document s�par�. La version actuelle
 consiste simplement en un extrait concernant les liens dynamiques et
 int�gr�s 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 donn�es de SQL-92. Cependant, des
 transformations doivent �tre d�finis entre les objets SQL et les
 variables des langages de programmation.

 Pour les langages orient�s objets, la transformation doit �tre d�finie
 pour les types de donn�es courants SQL et entre le mod�le objet SQL et
 le mod�le objet du langage orient� objet.

 Le mod�le objet doit se stabiliser avant de r�soudre ces probl�mes.

 Les liens avec le langage feront partie int�grante de SQL3.

 2244..1155..  PPaarrttiiee 66 -- IInntteerrffaaccee ddee SSpp��cciiaalliissaattiioonn ((SSQQLL//XXAA)) IISSOO//AANNSSII SSQQLL
 XXAA))

 Cette sp�cification 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 s�mantique 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 d�riv� d'une publication de l'X/Open, avec sa permission,
 qui sp�cifie explicitement les param�tres d'entr�e, de sortie et la
 s�mantique, en termes de types de donn�es 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 sp�cifications XA de l'X/Open.
 Ce processus de suivi, au plus pr�s, consiste � adopter les
 sp�cifications de l'industrie sans changements. Le vote pour l'XA �
 l'ISO SC21, JTC 1 a d�but� le 27 avril 1995 et se termine le 27
 octobre 1995. Si les sp�cifications XA sont approuv�es 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.

 2244..1166..  PPaarrttiiee 77 -- IISSOO//AANNSSII SSQQLL TTeemmppoorreell

 Le SQL Temporel traite des donn�es en relation avec le temps.
 Conceptuellement, cela consiste � dire qu'il est utile d'aller
 chercher des donn�es pour d�couvrir l'allure qu'elles avaient � un
 certain moment. L'origine du SQL Temporel r�side dans un papier de
 d�cembre 1994 de Rick Snodgrass qui en d�crivait 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 (Pr�sident du comit� TSQL2)
      31-Dec-1994


 Plusieurs personnes se sont pos� la question de la n�cessit� 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 donn�es temporelles). Le sentiment est que les
 types de donn�es abstraits (ADT) sont suffisants pour g�rer les ques�
 tions de temps. Dans ce papier, je d�montre, par des exemples con�
 crets, que l'utilisation de colonnes typ�es, avec des types de donn�es
 abstraits, est inadapt�e pour des requ�tes temporelles.  En partic�
 ulier, beaucoup de requ�tes temporelles courantes sont soit difficiles
 � simuler en SQL, soit n�cessitent d'int�grer SQL dans un langage
 proc�dural. Des solutions alternatives sont expos�es dans TSQL2, une
 extension temporelle � SQL-92.

 2244..1166..11..  IINNTTRROODDUUCCTTIIOONN

 La prise en charge d'un instant de validit� va au-del� de celle de
 types de donn�es temporels abstraits (ADT temporel). Avec ce dernier,
 on sp�cifie qu'une colonne sera celle consacr�e au domaine temporel,
 tel que la DATE ou un INTERVALLE (je donnerai des exemples bient�t).
 Avec un instant de validit�, les lignes d'une table varient en
 fonction du temps, refl�tant les modifications de la r�alit�. Le
 timbre dateur associ� � une ligne d'une table � instant de validit�
 est interpr�t� 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 requ�tes de mani�re
 simple et intuitive.

 2244..1166..22..  ��TTUUDDEE DDEE CCAASS -- EENNRREEGGIISSTTRREEMMEENNTT DDEE LL''IINNFFOORRMMAATTIIOONN CCOOUURRAANNTTEE

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


              Employee(Name, Salary, Title)




 �tant donn� cette table, retrouver le salaire d'un employ� est une
 op�ration ais�e.


              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 sch�ma suiv�
 ant.


              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'




 2244..1166..33..  ��TTUUDDEE DDEE CCAASS -- EENNRREEGGIISSTTRREEMMEENNTT DDEE LL''IINNFFOORRMMAATTIIOONN HHIISSTTOORRIIQQUUEE

 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 mod�le de donn�es, ces nouvelles colonnes sont identiques � la
 date de naissance. Cependant, leur pr�sence � des cons�quences �
 grande �chelle.

 2244..1166..44..  ��TTUUDDEE DDEE CCAASS -- PPRROOJJEECCTTIIOONN

 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 requ�te est plus compliqu�e que la pr�c�dente. 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, sp�cifiquement, il est n�cessaire de d�terminer les inter�
 valles 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 r�sultat 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 informa�
 tions Salaire et Titre, et de laisser l'utilisateur d�terminer quand
 son salaire a chang�. Cette alternative n'est ni tr�s attirante ni
 tr�s r�aliste. Une seconde alternative est d'utiliser SQL autant que
 possible.


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




 r�p�ter


              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 fusionn�s. La boucle est ex�cut�e log N fois
 dans le pire des cas, o� N est le nombre de lignes dans une cha�ne de
 lignes de valeur �quivalente qui se chevauchent ou sont adjacentes. Le
 lecteur peut simuler cette requ�te sur la table de l'exemple pour se
 convaincre de sa v�rit�.

 Une troisi�me alternative consiste � utiliser SQL uniquement pour
 ouvrir un curseur sur la table. Une liste cha�n�e de p�riodes est
 entretenue, chacune avec un salaire. La liste cha�n�e doit �tre
 initialis�e 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-donn�es est retourn� alors aller � fin;
              trouver la position dans la liste cha�n�e pour ins�rer cette information;
              aller � boucle;
      fin:
      CLOSE emp_cursor;



 R�p�ter tout au long de la liste cha�n�e, �dition des dates et des
 salaires

 La liste cha�n�e peut ne pas �tre n�cessaire au cas o� le curseur est
 ORDER BY Start.

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


              SELECT Salary
              FROM Employee




 2244..1166..55..  ��TTUUDDEE DDEE CCAASS -- JJOOIINNTTUURREE

 Une approche plus drastique consiste � �viter le probl�me d'extraction
 de l'historique du salaire en r�organisant le sch�ma pour s�parer 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 inter�
 valles de titre (c'est-�-dire, supposons que le BP veuille qu'une
 table soit calcul�e 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 enti�rement SQL.
 Malheureusement, cette requ�te doit faire une �tude de cas sur la
 mani�re 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 fa�on correcte, tous les cas constitue une
 t�che qui rel�ve du challenge. En TSQL2, r�aliser une jointure tem�
 porelle correspond simplement � ce que l'on peut esp�rer.


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




 2244..1166..66..  ��TTUUDDEE DDEE CCAASS -- AAGGRR��GGAATTSS

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


              SELECT MAX(Salary)
              FROM Employee




 Maintenant que l'historique du salaire est enregistr�, nous obtien�
 drons quelque chose comme l'historique du salaire maximum � travers le
 temps. Le probl�me est que, naturellement, SQL ne fournit pas
 d'agr�gats temporels. Le moyen simple de r�aliser cela consiste �
 �diter l'information, et � chercher, � la main, le maximum. Une alter�
 native consiste � �tre plus astucieux et � convertir l'instantan� de
 la requ�te agr�g�e en une requ�te non agr�g�e, puis � convertir le
 r�sultat en requ�te temporelle. La requ�te non agr�g�e 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 requ�te en une requ�te 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 cr�e une table auxiliaire. Nous ajoutons � cette table
 la p�riode inf�rieure soustraite d'une p�riode et la partie sup�rieure
 soustraite d'une p�riode. Nous supprimons alors toutes les p�riodes
 qui se chevauchent avec une ligne d�finie dans la sous-requ�te, de ce
 fait r�alisant le NOT EXISTS(n'existe pas). Finalement nous g�n�rons �
 partir de la table auxiliaire les p�riodes maximales, de la m�me fa�on
 que l'information de salaire avait �t� calcul�e ci-dessus. Comme on
 peut l'imaginer, un tel code SQLest extr�mement inefficace �
 l'ex�cution, compte tenu des requ�tes complexes imbriqu�es contenant
 des pr�dicats d'in�galit�.

 Une troisi�me alternative consiste � utiliser le moins possible SQL,
 et plut�t de calculer le maximum d�sir� dans un langage h�te en
 utilisant des curseurs.

 La requ�te en TSQL2 est de nouveau simple et intuitive.


              SELECT MAX(Salary)
              FROM Employee







 2244..1166..77..  RR��SSUUMM��

 Dans la plupart des applications de base de donn�es on manipule des
 donn�es qui changent en fonction du temps. La prise en compte de
 l'instant de validit� est absente de SQL. Beaucoup de requ�tes
 temporelles ordinaires sont difficiles � simuler en SQL, ou requi�rent
 du SQL int�gr� dans un langage proc�dural, ceci �tant d� au manque de
 support des tables avec instant de validit� dans son mod�le de donn�es
 et dans la structure des requ�tes.

 Ailleurs, nous avons montr� que l'ajout du support de l'instant de
 validit� ne requiert que peu de modifications dans l'impl�mentation
 des SGDB, peut radicalement simplifier un certain nombre de requ�tes
 et en permettre d'autres, et peut, plus tard, permettre des
 optimisations dans les structures de m�moires, les m�thodes
 d'indexation et les strat�gies d'optimisation qui peuvent entra�ner
 des am�liorations notables dans les performances.

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


      ----------------------------------------------------------------------------
                 Comit� de Normalisation Accr�dit�* X3, Technologie de L'Information
      COMMUNIQUE

      Doc. No.:       PR/96-0002

      Reply to:       Barbara Bennett at [email protected]

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

                               9075 Partie 7:  SQL/Temporal

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




 -- Le Comit� de Normalisation Accr�dit� X3, Technologie de l'Informa�
 tion, annonce l'approbation d'un nouveau projet concernant le support
 de SQL/Temporel , ISO/IEC 9075 Partie 7, le travail devant �tre
 r�alis� au sein du Comit� Technique X3H2, Bases de Donn�es.  Cette
 proposition de norme concerne un nouvelle partie de la norme naissante
 SQL3, e.g., Partie 7, SQL Temporel, et sp�cifie les extensions au lan�
 gage SQL pour g�rer le stockage, l'extraction et la manipulation des
 donn�es temporelles dans un environnement de base de donn�es SQL.

 La prochaine r�union du comit� X3H2 est planifi� pour la p�riode du 11
 au 14 Mars 1996 dans le Kansas.

 Les questions concernant ce projet doivent �tre envoy�es au pr�sident
 de X3H2 :


              Chairman of X3H2,
              Dr. Donald R. Deutsch,
              Sybase, Inc., Suite 800,
              6550 Rock Spring
              Drive, Bethesda, MD  20817.
              Email: [email protected].


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


              X3 Secretariat
              1250 Eye Street
              NW, Suite 200,
              Washington DC  20005.
              Email: [email protected]
              FAX:  (202)638-4922.




 2244..1177..  PPaarrttiiee 88 -- SSQQLL MMUULLTTIIMMEEDDIIAA IISSOO//AANNSSII ((SSQQLL//MMMM))

 Un nouveau projet international de normalisation ISO/IEC pour le
 d�veloppement d'une biblioth�que de classe SQL pour les applications
 multi-media a �t� approuv� d�but 1993. Cette nouvelle activit� de
 normalisation, appel�e SQL Multi-media (SQL/MM), sp�cifiera les
 paquetages de d�finition de types de donn�es abstraites SQL (ADT) en
 utilisant les fonctions fournies dans les sp�cifications SQL3
 naissantes pour ADT.  SQL/MM a pour objectif de normaliser des
 biblioth�ques de classes pour la science et l'ing�nierie, le
 traitement des textes et des documents, ainsi que des m�thodes pour la
 gestion d'objets multi-media tels que les images, les sons, les
 animations, la musique et la vid�o. Il fournira vraisemblablement un
 lien entre le langage SQL et les objets multi-media d�finis par les
 autres entit�s de normalisation du JTC1 (e.g. SC18 pour les documents,
 SC24 pour les images, et SC29 pour les photographies et les images
 anim�es).

 Le Plan du Projet pour SQL/MM pr�voit que ce sera une norme multi-
 parties dont le nombre de parties pourra �voluer. La partie 1
 consistera en un cadre sp�cifiant comment les autres parties doivent
 �tre architectur�.  Chacune de ces autres parties sera consacr�e � un
 paquetage d'application SQL sp�cifique. En ao�t 1994, la structure
 existante �tait la suivante :


 �  Partie 1: Cadre - Description non technique de la mani�re dont le
    document est structur�.

 �  Partie 2: M�thodes pour le Texte et ADT (types de donn�es
    abstraits) pour le traitement des textes. Environ 45 pages.

 �  Partie 3: M�thodes Spatiales et ADT pour la gestion des donn�es
    spatiales Environ 200 pages avec l'active contribution d'experts en
    Donn�es Spatiales de 3 entit�s nationales.

 �  Partie 4: M�thode � Usage G�n�ral et ADT pour les nombres
    complexes, et des fonctionnalit�s incluant la trigonom�trie 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 G�ographiques :


 �  ANSI X3L1 - Syst�mes d'Information G�ographique.  Mark Ashworth de
    Unisys est charg� de la liaison entre X3L1 et ANSI X3H2. Il est
    �galement le r�dacteur des parties 1, 3, and 4 du brouillon de
    SQL/MM.


 �  ISO TC 211 - Information g�ographique/G�omatique.

 2255..  SSuuppppoorrtt TTeecchhnniiqquuee ppoouurr PPoossttggrreeSSQQLL

 Si vous avez des questions techniques ou si vous rencontrez des
 probl�mes vous pouvez envoyer un courrier �lectronique � :

 �  [email protected]

    et vous recevrez par courrier �lectronique une r�ponse dans la
    journ�e qui suit.  Comme le nombre de produits internet est tr�s
    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 t�l�phone car on peut
    r�cup�rer 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 � cr�er une
 documentation imprim�e, des guides, des livres pour aider les clients.
 Les profits seront �galement utilis�s � construire des
 immeubles/salles de classe et � offrir des cours techniques sur
 l'administration et la gestion des bases de donn�es et � organiser des
 conf�rences annuelles pour les utilisateurs.  Ceci devrait aider
 l'organisation PostgreSQL � se d�brouiller toute seule.

 Vous pouvez aussi vous faire aider par des soci�t�s de conseil
 professionnelles telles que Anderson, WGS (Work Group Solutions). Pour
 de l'aide, puisqu'ils ont une tr�s 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>

 2266..  AAssppeeccttss ��ccoonnoommiiqquueess eett CCoommmmeerrcciiaauuxx

 Les bases de donn�es commerciales paient de nombreuses taxes telles
 que des taxes f�d�rales, d'�tat, sur les ventes, sur les salari�s, la
 s�curit� sociale, les taxes pour les soins m�dicaux, des indemnit�s
 pour les employ�s, des co�ts de marketing et de publicit�. Tous ces
 co�ts ne sont pas destin�s directement au d�veloppement de la base de
 donn�e. Quand vous achetez une base de donn�es commerciale une partie
 du montant est destin� aux taxes, aux d�penses de recherche et
 d�veloppement ( R&D ). Donc la valeur r�elle pour la base de donn�es
 est beaucoup plus faible.

 De plus les bases de donn�es commerciales doivent payer pour leurs
 immeubles/biens et pour l'achat de machines Unix, leur installation et
 leur maintenance. Tous ces co�ts sont r�percut�s sur les clients.

 PostgreSQL poss�de l'avantage, sur les bases de donn�es commerciales,
 de ne pas supporter de taxes puisque d�velopp�e sur l'internet. Un
 tr�s grand nombre de personnes contribuent � son d�veloppement. Par
 exemple, cas hypoth�tique, 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
  GGRRAANNDDEE MMAAGGIIEE  du d�veloppement sur internet.

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

 De nombreuses compagnies ont d�j� d�velopp� de grandes quantit�s de
 code "C", "C++" maison. Donc, en prenant le code source de PostgreSQL
 et en collaborant avec les autres compagnies sur internet, cela leur
 b�n�ficierait beaucoup en leur faisant �conomiser du temps et des
 efforts.

 2277..  LLiissttee ddeess aauuttrree BBaasseess ddee DDoonnnn��eess

 On trouvera ci-dessous la liste des autres bases de donn�es 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 Donn�es <http://linas.org/linux/db.html>

 �  Liste des Bases de Donn�es 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 [email protected]

 �  Liste des SGBDR de SAL <http://SAL.KachinaTech.COM/H/1/>

 �  Liste des SGBD Orient�s 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 Donn�es Publics  de l'ACM SIGMOD
    <http://bunny.cs.uiuc.edu/sigmod/databaseSoftware/>

 2288..  IInnddiiccaattiioonnss ppoouurr llaa rreecchheerrcchhee ssuurr llee WWoorrlldd WWiiddee WWeebb IInntteerrnneett

 Internet est immense, rec�le un tr�s grand nombre de logiciels et un
 oc�an d'informations. Il s'accro�t � 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
 crit�res de recherche. La m�thode de recherche par d�faut consiste en
 une "recherche intelligente" qui est plus g�n�rale et donne toutes les
 possibilit�s. Cliquez sur "Options" et s�lectionnez la recherche par
 "EXACT phrase" , par "AND" , par "OR" , etc... De cette mani�re 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.

 2299..  CCoonncclluussiioonn

 Apr�s avoir cherch� toutes les bases de donn�es 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 tr�s attractif
 en ce que beaucoup de travail a d�j� �t� effectu� et qu'il poss�de des
 pilotes ODBC et JDBC permettant d'�crire des applications
 ind�pendantes des bases de donn�es. Les applications �crites en
 PostgreSQL qui utilisent les pilotes ODBC, JDBC sont facilement
 portables sur d'autres syst�mes tels que Oracle, Sybase et Informix et
 vice versa.

 Vous pouvez vous demander "Mais pourquoi PostgreSQL ?" La r�ponse �
 cela est que puisqu'il faut pas mal de temps pour d�velopper un
 syst�me de gestion de base de donn�es ex nihilo, il est plus
 raisonnable d'en utiliser un qui satisfasse aux conditions suivantes -

 Un syst�me de gestion de base de donn�es

 �  Dont le code source soit disponible, ce doit �tre un syst�me �
    "code source ouvert"

 �  Qui ne n�cessite pas de licence, qui n'a pas de doits de propri�t�

 �  Qui puisse �tre distribu� sur internet

 �  Qui a n�cessit� plusieurs ann�es de d�veloppement.

 �  Qui satisfasse des standards tels que ISO/ANSI SQL 92 (and SQL 89)

 �  Qui puisse r�pondre aux besoins futurs telles que SQL 3 (SQL 98)

 �  Qui poss�de des fonctionnalit�s avanc�es

    Et, justement, il appert que c'est 'PostgreSQL' qui r�pond � tous
    ces crit�res et que c'est un logiciel appropri� dans ce cas.

 3300..  FFAAQQ -- QQuueessttiioonnss ssuurr PPoossttggrreeSSQQLL

 Veuillez vous r�f�rer � la derni�re version de la FAQ pour les
 questions g�n�rales, celles concernant Linux et Irix � :

 �  <http://www.postgresql.org/docs/faq-english.shtml>

 3311..  NNoottiiccee ddee CCooppyyrriigghhtt

 Copyright (c) 1997 Al Dev (Alavoor Vasudevan). Tous droits r�serv�s.

 AUCUNE RESPONSABILIT� NE SAURAIT �TRE RETENUE POUR DES DOMMAGES
 CONS�CUTIFS 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, sp�cial, fortuit,
 cons�cutif, blessures directes ou indirectes pour les personnes,
 pertes financi�res dues au manque � gagner, � l'interruption
 d'activit�, pertes d'informations commerciales  ou toutes autres
 pertes financi�res) r�sultant de l'utilisation de ce document.

 L'auteur et le traducteur n'offrent aucunes garanties sur
 l'ad�quation, l'utilit� ou la valeur marchande de ce document. Les
 marques, les compagnies et les noms de produits mentionn�s dans ce
 document sont des marques de fabrique ou des marques d�pos�es de leurs
 propri�taires respectifs. Veuillez vous r�f�rer aux notices de
 copyright individuelles des marques, compagnies et produits mentionn�s
 dans ce document. Il est de votre responsabilit� de lire et de
 comprendre les notices de copyright des
 organisations/compagnies/produits/auteurs mentionn�s dans ce document
 avant d'utiliser leurs informations respectives.

 AAFF..  AAppppeennddiiccee AA -- SSyynnttaaxxee ddee ll'' AANNSSII//IISSOO SSQQLL 11999922




 Ce fichier contient la grammaire en BNF du langage, arborescence
 explor�e d'abord en profondeur, r�alis�e le 27-AO�T-1992 11:03:41.64.
 La version sp�cifique de BNF donn�e 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 paren>

 <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 paren> ]

 <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 paren>

 <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 paren>

 <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>




 AAGG..  AAppppeennddiiccee BB -- TTuuttoorriieell SSQQLL �� ll''uussaaggee ddeess dd��bbuuttaannttss


 AAGG..11..  DDiiddaaccttiicciieell ppoouurr PPoossttggrreeSSQQLL

 Le didacticiel SQL est inclus dans la distribution de PostgreSQL.  Les
 scripts du didacticiel SQL se trouvent dans le r�pertoire src/tutorial

 AAGG..22..  PPooiinntteeuurrss UURRLL IInntteerrnneett

 On peut trouver le didacticiel SQL pour d�butants �

 �  <http://w3.one.net/~jhoffman/sqltut.htm>

    Pour les commentaires ou suggestions, envoyer un courrier
    �lectronique �

 �  [email protected]

    John Hoffman sugg�re de visiter les sites suivants :

 �  R�f�rence 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

 �  Ingr�dients 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 donn�es SQL
    <http://chaos.mur.csu.edu.au/itc125/cgi/sqldb.html>
 �  Page de conception de la base de donn�e RIT
    <http://www.it.rit.edu/~wjs/IT/199602/icsa720/icsa720postings.html>

 �  Site de renvoi sur les Bases de Donn�es
    <http://www.pcslink.com/~ej/dbweb.html>

 �  Didacticiels de programmation sur le Web
    <http://www.eng.uc.edu/~jtilley/tutorial.html>

 �  Ressources de d�veloppement
    <http://www.ndev.com/ndc2/support/resources.htp>

 �  Liste de requ�te  <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>

 AAHH..  AAppppeennddiixx CC -- IInnssttrruuccttiioonnss ppoouurr uunnee iinnssttaallllaattiioonn rraappiiddee ddee LLiinnuuxx

 Si vous envisagez d'utiliser PostgreSQL sous Linux, et avez besoin
 d'aide dans l'installation de Linux, consultez les pointeurs donn�s
 dans cette annexe.  Ils couvrent les sujets suivants :

 �  Fonctionnalit�s saillantes de Linux - Pourquoi Linux constitue un
    meilleur serveur de donn�es 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/>