Le fichier source est ${UPS_HOME}/upsqry/demo/${UPS_LANGUAGE}/mysql.upl.
Cet exemple n'utilise pas les instructions de l'extension d'Up ! 5GL pour Up ! Query. Les objets sémantiques sont construits dynamiquement.
Pour exécuter, le script ${UPS_HOME}/upsqry/demo/french/mysql.sql doit être chargé pour la connexion scott/tiger.
upscmp Source=mysql.upl
mysql ConnexionMySql=scott/tiger@localhost/MySql
upssng Source=mysql.upl ConnexionMySql=scott/tiger@localhost/MySql
Source Composant "Exemple d'emploi d'Up ! My Sql" Version 4.0.0;
ImporterModule
/************/
UpsQry(<UpsQry.upi>, ImporterDefinitions);
UpsMys(<UpsMys.upi>, ImporterDefinitions);
Procedure ListerEmployes(MaConnexionSql : Nul Ou IConnexionSql, NumeroDepartement : Entier)
/*****************************************************************************************/
Variable
/******/
MaRequeteSql : Nul Ou IRequeteSql;
MonResultatSql : Nul Ou ResultatRequeteSql;
Enregistrement : Nul Ou EnregistrementSql;
NomEmploye : Nul Ou Caractere;
DateEmbauche : Nul Ou Date;
NumeroEmploye : Nul Ou Entier;
Salaire : Nul Ou Reel;
Debut
Ecran.Ecrire("Département "+Caractere(NumeroDepartement));
Ecran.Ecrire("==============");
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql2", "SELECT ename:=${NomEmploye}, hiredate:=${DateEmbauche}, empno:=${NumeroEmploye}, sal:=${Salaire} FROM scott.emp WHERE deptno=${NumeroDepartement};");
MaRequeteSql.DeclarerParametre("NumeroDepartement", Entier);
MaRequeteSql.DeclarerResultat("NomEmploye", Caractere, 20);
MaRequeteSql.DeclarerResultat("DateEmbauche", Date);
MaRequeteSql.DeclarerResultat("NumeroEmploye", Entier);
MaRequeteSql.DeclarerResultat("Salaire", Reel);
MaRequeteSql.PreparerSql();
MaRequeteSql.EcrireParametre("NumeroDepartement", NumeroDepartement);
MonResultatSql=ResultatRequeteSql(MaRequeteSql.ExecuterSql());
Pour Enregistrement=MonResultatSql.ParcoursAuDebut() JusquA MonResultatSql.DernierElement() Faire
Enregistrement.LireResultat("NomEmploye", NomEmploye);
Enregistrement.LireResultat("DateEmbauche", DateEmbauche);
Enregistrement.LireResultat("NumeroEmploye", NumeroEmploye);
Enregistrement.LireResultat("Salaire", Salaire);
Ecran.Ecrire(NomEmploye+" "+Caractere(DateEmbauche)+" "+Caractere(NumeroEmploye)+" "+Caractere(Salaire));
Fin Pour
Fin Procedure
Procedure ListerEmployes2(MaRequeteSql : Nul Ou IRequeteSql, NumeroDepartement : Entier)
/**************************************************************************************/
Variable
/******/
MonResultatSql : Nul Ou ResultatRequeteSql;
Enregistrement : Nul Ou EnregistrementSql;
NomEmploye : Nul Ou Caractere;
DateEmbauche : Nul Ou Date;
NumeroEmploye : Nul Ou Entier;
Salaire : Nul Ou Reel;
Debut
Ecran.Ecrire("Département "+Caractere(NumeroDepartement));
Ecran.Ecrire("==============");
MaRequeteSql.EcrireParametre("NumeroDepartement", NumeroDepartement);
MonResultatSql=ResultatRequeteSql(MaRequeteSql.ExecuterSql());
Pour Enregistrement=MonResultatSql.ParcoursAuDebut() JusquA MonResultatSql.DernierElement() Faire
Enregistrement.LireResultat("NomEmploye", NomEmploye);
Enregistrement.LireResultat("DateEmbauche", DateEmbauche);
Enregistrement.LireResultat("NumeroEmploye", NumeroEmploye);
Enregistrement.LireResultat("Salaire", Salaire);
Ecran.Ecrire(NomEmploye+" "+Caractere(DateEmbauche)+" "+Caractere(NumeroEmploye)+" "+Caractere(Salaire));
Fin Pour
Fin Procedure
Procedure MettreAJourSalaire(MaConnexionSql : Nul Ou IConnexionSql)
/*****************************************************************/
Variable
/******/
MaRequeteSql : Nul Ou IRequeteSql;
MonOrdreSql : Nul Ou IOrdreSql;
MonResultatSql : Nul Ou ResultatRequeteSql;
Enregistrement : Nul Ou EnregistrementSql;
NumeroEmploye : Nul Ou Entier;
Salaire : Nul Ou Reel;
Debut
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql3", "SELECT empno:=${NumeroEmploye}, sal:=${Salaire} FROM scott.emp;", 5);
MaRequeteSql.DeclarerResultat("NumeroEmploye", Entier);
MaRequeteSql.DeclarerResultat("Salaire", Reel);
MaRequeteSql.PreparerSql();
MonOrdreSql=MaConnexionSql.CreerOrdreSql("MonOrdreSql4", "UPDATE scott.emp SET sal=${Salaire} WHERE empno=${NumeroEmploye};", 7);
MonOrdreSql.DeclarerParametre("Salaire", Reel);
MonOrdreSql.DeclarerParametre("NumeroEmploye", Entier);
MonOrdreSql.PreparerSql();
MonResultatSql=ResultatRequeteSql(MaRequeteSql.ExecuterSql());
Pour Enregistrement=MonResultatSql.ParcoursAuDebut() JusquA MonResultatSql.DernierElement() Faire
Enregistrement.LireResultat("NumeroEmploye", NumeroEmploye);
Enregistrement.LireResultat("Salaire", Salaire);
MonOrdreSql.EcrireParametre("NumeroEmploye", NumeroEmploye);
MonOrdreSql.EcrireParametre("Salaire", -Salaire);
Fin Pour
MonOrdreSql.ExecuterSql();
MaConnexionSql.Valider();
Fin Procedure
Procedure InsererDescription(MaConnexionSql : Nul Ou IConnexionSql)
/*****************************************************************/
Variable
/******/
MaRequeteSql : Nul Ou IRequeteSql;
MonOrdreSql : Nul Ou IOrdreSql;
MonResultatSql : Nul Ou ResultatRequeteSql;
Enregistrement : Nul Ou EnregistrementSql;
NomEmploye : Nul Ou Caractere;
NumeroEmploye : Nul Ou Entier;
Debut
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql4", "SELECT empno:=${NumeroEmploye}, ename:=${NomEmploye} FROM scott.emp WHERE deptno=10;", 5);
MaRequeteSql.DeclarerResultat("NumeroEmploye", Entier);
MaRequeteSql.DeclarerResultat("NomEmploye", Caractere, 20);
MaRequeteSql.PreparerSql();
MonOrdreSql=MaConnexionSql.CreerOrdreSql("MonOrdreSql5", "INSERT INTO scott.emp_desc(empno, description) VALUES (${NumeroEmploye}, ${Description});");
MonOrdreSql.DeclarerParametre("NumeroEmploye", Entier);
MonOrdreSql.DeclarerParametre("Description", Caractere, ParametreEntree, TailleObjetSqlLong);
MonOrdreSql.PreparerSql();
MonResultatSql=ResultatRequeteSql(MaRequeteSql.ExecuterSql());
Pour Enregistrement=MonResultatSql.ParcoursAuDebut() JusquA MonResultatSql.DernierElement() Faire
Enregistrement.LireResultat("NumeroEmploye", NumeroEmploye);
Enregistrement.LireResultat("NomEmploye", NomEmploye);
MonOrdreSql.EcrireParametre("NumeroEmploye", NumeroEmploye);
MonOrdreSql.EcrireParametre("Description", NomEmploye+" - Ceci est un commentaire long sur le nom de l'employe.");
MonOrdreSql.ExecuterSql();
Fin Pour
MaConnexionSql.Valider();
Fin Procedure
Procedure ListerDescriptions(MaConnexionSql : Nul Ou IConnexionSql)
/*****************************************************************/
Variable
/******/
MaRequeteSql : Nul Ou IRequeteSql;
MonResultatSql : Nul Ou ResultatRequeteSql;
Enregistrement : Nul Ou EnregistrementSql;
Description : Nul Ou Caractere;
NumeroEmploye : Nul Ou Entier;
Debut
Ecran.Ecrire("Description");
Ecran.Ecrire("===========");
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql5", "SELECT empno:=${NumeroEmploye}, description:=${Description} FROM scott.emp_desc;");
MaRequeteSql.DeclarerResultat("NumeroEmploye", Entier);
MaRequeteSql.DeclarerResultat("Description", Caractere, TailleObjetSqlLong);
MaRequeteSql.PreparerSql();
MonResultatSql=ResultatRequeteSql(MaRequeteSql.ExecuterSql());
Pour Enregistrement=MonResultatSql.ParcoursAuDebut() JusquA MonResultatSql.DernierElement() Faire
Enregistrement.LireResultat("NumeroEmploye", NumeroEmploye);
Enregistrement.LireResultat("Description", Description);
Ecran.Ecrire(Caractere(NumeroEmploye)+" : "+Description);
Fin Pour
Fin Procedure
Procedure InsererImage(MaConnexionSql : Nul Ou IConnexionSql)
/***********************************************************/
Variable
/******/
MaRequeteSql : Nul Ou IRequeteSql;
MonOrdreSql : Nul Ou IOrdreSql;
MonResultatSql : Nul Ou ResultatRequeteSql;
Enregistrement : Nul Ou EnregistrementSql;
NomEmploye : Nul Ou Caractere;
NumeroEmploye : Nul Ou Entier;
FichierPhoto : Nul Ou Fichier;
TaillePhoto : Entier;
Photo : Nul Ou Binaire;
Debut
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql6", "SELECT empno:=${NumeroEmploye}, ename:=${NomEmploye} FROM scott.emp WHERE deptno=10;", 5);
MaRequeteSql.DeclarerResultat("NumeroEmploye", Entier);
MaRequeteSql.DeclarerResultat("NomEmploye", Caractere, 20);
MaRequeteSql.PreparerSql();
MonOrdreSql=MaConnexionSql.CreerOrdreSql("MonOrdreSql6", "INSERT INTO scott.emp_pict(empno, picture) VALUES (${NumeroEmploye}, ${Photo});");
MonOrdreSql.DeclarerParametre("NumeroEmploye", Entier);
MonOrdreSql.DeclarerParametre("Photo", Binaire, ParametreEntree, TailleObjetSqlLong);
MonOrdreSql.PreparerSql();
MonResultatSql=ResultatRequeteSql(MaRequeteSql.ExecuterSql());
Pour Enregistrement=MonResultatSql.ParcoursAuDebut() JusquA MonResultatSql.DernierElement() Faire
Enregistrement.LireResultat("NumeroEmploye", NumeroEmploye);
Enregistrement.LireResultat("NomEmploye", NomEmploye);
FichierPhoto=Fichier("${UPS_HOME}/upsqry/demo/"+NomEmploye+".JPG", LectureBinaire);
FichierPhoto.FixerPosition(0, PositionFluxFin);
TaillePhoto=FichierPhoto.LirePosition();
FichierPhoto.FixerPosition(0, PositionFluxDebut);
?=FichierPhoto.Lire(Photo, TaillePhoto);
FichierPhoto.Fermer();
MonOrdreSql.EcrireParametre("NumeroEmploye", NumeroEmploye);
MonOrdreSql.EcrireParametre("Photo", Photo);
MonOrdreSql.ExecuterSql();
Fin Pour
MaConnexionSql.Valider();
Fin Procedure
Procedure ListerImages(MaConnexionSql : Nul Ou IConnexionSql)
/***********************************************************/
Variable
/******/
MaRequeteSql : Nul Ou IRequeteSql;
MonResultatSql : Nul Ou ResultatRequeteSql;
Enregistrement : Nul Ou EnregistrementSql;
NumeroEmploye : Nul Ou Entier;
FichierPhoto : Nul Ou Fichier;
Photo : Nul Ou Binaire;
Debut
Ecran.Ecrire("Image");
Ecran.Ecrire("=====");
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql7", "SELECT empno:=${NumeroEmploye}, picture:=${Photo} FROM scott.emp_pict;");
MaRequeteSql.DeclarerResultat("NumeroEmploye", Entier);
MaRequeteSql.DeclarerResultat("Photo", Binaire, TailleObjetSqlLong);
MaRequeteSql.PreparerSql();
MonResultatSql=ResultatRequeteSql(MaRequeteSql.ExecuterSql());
Pour Enregistrement=MonResultatSql.ParcoursAuDebut() JusquA MonResultatSql.DernierElement() Faire
Enregistrement.LireResultat("NumeroEmploye", NumeroEmploye);
Enregistrement.LireResultat("Photo", Photo);
FichierPhoto=Fichier("/tmp/"+Caractere(NumeroEmploye, "&&")+".jpeg", EcritureBinaire);
FichierPhoto.Ecrire(Photo);
FichierPhoto.Fermer();
Ecran.Ecrire(Caractere(NumeroEmploye)+" : "+Caractere(Photo.Longueur(), "&&"));
Fin Pour
Fin Procedure
Principal
/*******/
Variable
/******/
MaConnexionSql : Nul Ou ConnexionMySql;
MaRequeteSql : Nul Ou IRequeteSql;
MonOrdreSql : Nul Ou IOrdreSql;
MonBlocSql : Nul Ou IBlocSql;
SalaireMin : Reel;
SalaireMax : Reel;
SalaireMoyen : Reel;
Debut
MaConnexionSql=ConnexionMySql("scott", "tiger");
/* Lecture parametree et rang a rang sans reutilisation du curseur. */
ListerEmployes(IConnexionSql(MaConnexionSql), 10);
ListerEmployes(IConnexionSql(MaConnexionSql), 20);
ListerEmployes(IConnexionSql(MaConnexionSql), 30);
Ecran.Ecrire(");
/* Lecture parametree et par tableau avec reutilisation du curseur. */
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql", "SELECT ename:=${NomEmploye}, hiredate:=${DateEmbauche}, empno:=${NumeroEmploye}, sal:=${Salaire} FROM scott.emp WHERE deptno=${NumeroDepartement};", 5);
MaRequeteSql.DeclarerParametre("NumeroDepartement", Entier);
MaRequeteSql.DeclarerResultat("NomEmploye", Caractere, 20);
MaRequeteSql.DeclarerResultat("DateEmbauche", Date);
MaRequeteSql.DeclarerResultat("NumeroEmploye", Entier);
MaRequeteSql.DeclarerResultat("Salaire", Reel);
MaRequeteSql.PreparerSql();
ListerEmployes2(MaRequeteSql, 10);
ListerEmployes2(MaRequeteSql, 20);
ListerEmployes2(MaRequeteSql, 30);
Ecran.Ecrire(");
/* Modifications annulees. */
MaConnexionSql.ExecuterOrdreSql("MonOrdreSql", "INSERT INTO scott.emp(ename, hiredate, empno, deptno, sal) VALUES ('youpi', NOW(), 9000, 40, 1000.00);");
MonOrdreSql=MaConnexionSql.CreerOrdreSql("MonOrdreSql7", "INSERT INTO scott.emp(ename, hiredate, empno, deptno, sal) VALUES (${NomEmploye}, ${DateEmbauche}, ${NumeroEmploye}, ${NumeroDepartement}, ${Salaire});");
MonOrdreSql.DeclarerParametre("NomEmploye", Caractere, ParametreEntree, 20);
MonOrdreSql.DeclarerParametre("DateEmbauche", Date);
MonOrdreSql.DeclarerParametre("NumeroEmploye", Entier);
MonOrdreSql.DeclarerParametre("NumeroDepartement", Entier);
MonOrdreSql.DeclarerParametre("Salaire", Reel);
MonOrdreSql.PreparerSql();
MonOrdreSql.EcrireParametre("NomEmploye", "youpi2");
MonOrdreSql.EcrireParametre("DateEmbauche", DateSysteme());
MonOrdreSql.EcrireParametre("NumeroEmploye", 9001);
MonOrdreSql.EcrireParametre("NumeroDepartement", 40);
MonOrdreSql.EcrireParametre("Salaire", 1001.00);
MonOrdreSql.ExecuterSql();
MaConnexionSql.Invalider();
ListerEmployes(IConnexionSql(MaConnexionSql), 40);
Ecran.Ecrire(");
/* Modifications validees. */
MaConnexionSql.ExecuterOrdreSql("MonOrdreSql2", "INSERT INTO scott.emp(ename, hiredate, empno, deptno, sal) VALUES ('youpi3', NOW(), 9100, 40, 1100.00);");
MonOrdreSql=MaConnexionSql.CreerOrdreSql("MonOrdreSql8", "INSERT INTO scott.emp(ename, hiredate, empno, deptno, sal) VALUES (${NomEmploye}, ${DateEmbauche}, ${NumeroEmploye}, ${NumeroDepartement}, ${Salaire});");
MonOrdreSql.DeclarerParametre("NomEmploye", Caractere, ParametreEntree, 20);
MonOrdreSql.DeclarerParametre("DateEmbauche", Date);
MonOrdreSql.DeclarerParametre("NumeroEmploye", Entier);
MonOrdreSql.DeclarerParametre("NumeroDepartement", Entier);
MonOrdreSql.DeclarerParametre("Salaire", Reel);
MonOrdreSql.PreparerSql();
MonOrdreSql.EcrireParametre("NomEmploye", "youpi4");
MonOrdreSql.EcrireParametre("DateEmbauche", DateSysteme());
MonOrdreSql.EcrireParametre("NumeroEmploye", 9101);
MonOrdreSql.EcrireParametre("NumeroDepartement", 40);
MonOrdreSql.EcrireParametre("Salaire", 1101.00);
MonOrdreSql.ExecuterSql();
MaConnexionSql.Valider();
ListerEmployes(IConnexionSql(MaConnexionSql), 40);
Ecran.Ecrire(");
/* Mise a jour par tableau. */
MaConnexionSql.ExecuterOrdreSql("MonOrdreSql9", "UPDATE scott.emp SET sal=-sal;");
MettreAJourSalaire(IConnexionSql(MaConnexionSql));
ListerEmployes(IConnexionSql(MaConnexionSql), 10);
ListerEmployes(IConnexionSql(MaConnexionSql), 20);
ListerEmployes(IConnexionSql(MaConnexionSql), 30);
Ecran.Ecrire(");
/* Nettoyage des modifications. */
MaConnexionSql.ExecuterOrdreSql("MonOrdreSql10", "DELETE FROM scott.emp WHERE deptno=40;");
MaConnexionSql.Valider();
/* Appel d'une procedure stockee. */
MonBlocSql=MaConnexionSql.CreerBlocSql("MonBlocSql", "CALL scott.MaProcedure(${NumeroDepartement}, ${SalaireMin}, ${SalaireMax});");
MonBlocSql.DeclarerParametre("NumeroDepartement", Entier);
MonBlocSql.DeclarerParametre("SalaireMin", Reel, ParametreSortie);
MonBlocSql.DeclarerParametre("SalaireMax", Reel, ParametreSortie);
MonBlocSql.PreparerSql();
MonBlocSql.EcrireParametre("NumeroDepartement", 10);
MonBlocSql.ExecuterSql();
MonBlocSql.LireParametre("SalaireMin", SalaireMin);
MonBlocSql.LireParametre("SalaireMax", SalaireMax);
Ecran.Ecrire("SalaireMin="+Caractere(SalaireMin));
Ecran.Ecrire("SalaireMax="+Caractere(SalaireMax));
/* Appel d'une fonction stockee. */
MonBlocSql=MaConnexionSql.CreerBlocSql("MonBlocSql2", "SELECT scott.MaFonction(${NumeroDepartement}) INTO ${SalaireMoyen};");
MonBlocSql.DeclarerParametre("SalaireMoyen", Reel, ParametreSortie);
MonBlocSql.DeclarerParametre("NumeroDepartement", Entier);
MonBlocSql.PreparerSql();
MonBlocSql.EcrireParametre("NumeroDepartement", 10);
MonBlocSql.ExecuterSql();
MonBlocSql.LireParametre("SalaireMoyen", SalaireMoyen);
Ecran.Ecrire("SalaireMoyen="+Caractere(SalaireMoyen));
Ecran.Ecrire(");
/* Textes longs. */
MaConnexionSql.ExecuterOrdreSql("MonOrdreSql11", "DELETE FROM scott.emp_desc;");
MaConnexionSql.Valider();
InsererDescription(IConnexionSql(MaConnexionSql));
ListerDescriptions(IConnexionSql(MaConnexionSql));
/* Images longs. */
MaConnexionSql.ExecuterOrdreSql("MonOrdreSql12", "DELETE FROM scott.emp_pict;");
MaConnexionSql.Valider();
InsererImage(IConnexionSql(MaConnexionSql));
ListerImages(IConnexionSql(MaConnexionSql));
Fin Principal