Le fichier source est ${UPS_HOME}/upsqry/demo/${UPS_LANGUAGE}/odbc2.upl.
Cet exemple utilise les instructions de l'extension d'Up ! 5GL pour Up ! Query. Les objets sémantiques sont déclarés statiquement.
Pour analyser le fichier source, UpsQry.upi doit être déclaré parmi les modules importés dans le fichier ${UPS_HOME}/ini/${UPS_USER}/upsp5l.ini.
Pour exécuter, le script ${UPS_HOME}/upsqry/demo/french/odbc.sql doit être chargé pour la connexion scott/tiger.
upscmp Source=odbc2.upl
odbc2 ConnexionOdbc=scott/tiger@MaSourceOdbc
upssng Source=odbc2.upl ConnexionOdbc=scott/tiger@MaSourceOdbc
Source Composant "Exemple d'emploi d'Up ! Odbc" Version 4.0.0;
ImporterModule
/************/
UpsOdb(<UpsOdb.upi>, ImporterDefinitions);
ConnexionSql
/**********/
MaConnexionSql(Odbc, "scott/tiger");
RequeteSql
/********/
MaRequeteSql ConnexionSql MaConnexionSql
ResultatSql(NomEmploye : Nul Ou Caractere TailleMaxSql 20, DateEmbauche : Nul Ou Date, NumeroEmploye : Nul Ou Entier, Salaire : Nul Ou Reel)
TailleTableauResultatSql 5
ParametreSql(NumeroDepartement : Entier)
SqlStatique
SELECT ename:=${NomEmploye}, hiredate:=${DateEmbauche}, empno:=${NumeroEmploye}, sal:=${Salaire}
FROM scott.emp
WHERE deptno=${NumeroDepartement};
Procedure ListerEmployes(NumeroDepartement2 : Entier)
/***************************************************/
Debut
Ecran.Ecrire("Département "+Caractere(NumeroDepartement2));
Ecran.Ecrire("==============");
RequeteSql MaRequeteSql2 ConnexionSql MaConnexionSql
ResultatSql(NomEmploye : Nul Ou Caractere TailleMaxSql 20, DateEmbauche : Nul Ou Date, NumeroEmploye : Nul Ou Entier, Salaire : Nul Ou Reel)
ParametreSql(NumeroDepartement : Entier=NumeroDepartement2)
SqlStatique
SELECT ename:=${NomEmploye}, hiredate:=${DateEmbauche}, empno:=${NumeroEmploye}, sal:=${Salaire}
FROM scott.emp
WHERE deptno=${NumeroDepartement};
Ecran.Ecrire(NomEmploye+" "+Caractere(DateEmbauche)+" "+Caractere(NumeroEmploye)+" "+Caractere(Salaire));
Fin RequeteSql
Fin Procedure
Procedure ListerEmployes2(NumeroDepartement2 : Entier)
/****************************************************/
Debut
Ecran.Ecrire("Département "+Caractere(NumeroDepartement2));
Ecran.Ecrire("==============");
RequeteSql MaRequeteSql
ResultatSql(NomEmploye : Nul Ou Caractere TailleMaxSql 20, DateEmbauche : Nul Ou Date, NumeroEmploye : Nul Ou Entier, Salaire : Nul Ou Reel)
ParametreSql(NumeroDepartement2);
Ecran.Ecrire(NomEmploye+" "+Caractere(DateEmbauche)+" "+Caractere(NumeroEmploye)+" "+Caractere(Salaire));
Fin RequeteSql
Fin Procedure
Procedure MettreAJourSalaire()
/****************************/
OrdreSql
/******/
MonOrdreSql4 ConnexionSql MaConnexionSql
ParametreSql(NumeroEmploye : Entier, Salaire : Reel) TailleTableauParametreSql 7
SqlStatique
UPDATE scott.emp SET sal=${Salaire}
WHERE empno=${NumeroEmploye};
Debut
RequeteSql MaRequeteSql3 ConnexionSql MaConnexionSql
ResultatSql(NumeroEmploye : Nul Ou Entier, Salaire : Nul Ou Reel)
SqlStatique
SELECT empno:=${NumeroEmploye}, sal:=${Salaire}
FROM scott.emp;
OrdreSql MonOrdreSql4
ParametreSql(NumeroEmploye, -Salaire);
Fin RequeteSql
ViderTableauParametreSql MonOrdreSql4;
MaConnexionSql.Valider();
Fin Procedure
Procedure InsererDescription()
/****************************/
Variable
/******/
Description : Nul Ou Caractere;
Debut
RequeteSql MaRequeteSql4 ConnexionSql MaConnexionSql
ResultatSql(NumeroEmploye : Nul Ou Entier, NomEmploye : Nul Ou Caractere TailleMaxSql 20)
TailleTableauResultatSql 5
SqlStatique
SELECT empno:=${NumeroEmploye}, ename:=${NomEmploye}
FROM scott.emp
WHERE deptno=10;
Description=NomEmploye+" - Ceci est un commentaire long sur le nom de l'employe.";
OrdreSql MonOrdreSql5 ConnexionSql MaConnexionSql
ParametreSql(NumeroEmploye, Description2 : Nul Ou Caractere EstLong=Description)
SqlStatique
INSERT INTO scott.emp_desc(empno, description) VALUES (${NumeroEmploye}, ${Description2});
Fin RequeteSql
MaConnexionSql.Valider();
Fin Procedure
Procedure ListerDescriptions()
/****************************/
Debut
Ecran.Ecrire("Description");
Ecran.Ecrire("===========");
RequeteSql MaRequeteSql5 ConnexionSql MaConnexionSql
ResultatSql(NumeroEmploye : Nul Ou Entier, Description : Nul Ou Caractere EstLong)
SqlStatique
SELECT empno:=${NumeroEmploye}, description:=${Description}
FROM scott.emp_desc;
Ecran.Ecrire(Caractere(NumeroEmploye)+" : "+Description);
Fin RequeteSql
Fin Procedure
Procedure InsererImage()
/**********************/
Variable
/******/
FichierPhoto : Nul Ou Fichier;
TaillePhoto : Entier;
Photo : Nul Ou Binaire;
Debut
RequeteSql MaRequeteSql6 ConnexionSql MaConnexionSql
ResultatSql(NumeroEmploye : Nul Ou Entier, NomEmploye : Nul Ou Caractere TailleMaxSql 20)
TailleTableauResultatSql 5
SqlStatique
SELECT empno:=${NumeroEmploye}, ename:=${NomEmploye}
FROM scott.emp
WHERE deptno=10;
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();
OrdreSql MonOrdreSql6 ConnexionSql MaConnexionSql
ParametreSql(NumeroEmploye, Photo2 : Nul Ou Binaire EstLong=Photo)
SqlStatique
INSERT INTO scott.emp_pict(empno, picture) VALUES (${NumeroEmploye}, ${Photo2});
Fin RequeteSql
MaConnexionSql.Valider();
Fin Procedure
Procedure ListerImages()
/**********************/
Variable
/******/
FichierPhoto : Nul Ou Fichier;
Debut
Ecran.Ecrire("Image");
Ecran.Ecrire("=====");
RequeteSql MaRequeteSql7 ConnexionSql MaConnexionSql
ResultatSql(NumeroEmploye : Nul Ou Entier, Photo : Nul Ou Binaire EstLong)
SqlStatique
SELECT empno:=${NumeroEmploye}, picture:=${Photo}
FROM scott.emp_pict;
FichierPhoto=Fichier("/tmp/"+Caractere(NumeroEmploye, "&&")+".jpeg", EcritureBinaire);
FichierPhoto.Ecrire(Photo);
FichierPhoto.Fermer();
Ecran.Ecrire(Caractere(NumeroEmploye)+" : "+Caractere(Photo.Longueur(), "&&"));
Fin RequeteSql
Fin Procedure
Principal
/*******/
Variable
/******/
SalaireMin : Reel;
SalaireMax : Reel;
SalaireMoyen : Reel;
BlocSql
/*****/
MonBlocSql ConnexionSql MaConnexionSql
ParametreSql(NumeroDepartement2 : Entier, SalaireMin2 : Reel Sortie, SalaireMax2 : Reel Sortie)
SqlStatique
{call scott.MaProcedure(${NumeroDepartement2}, ${SalaireMin2}, ${SalaireMax2})};
Fin SqlStatique
MonBlocSql2 ConnexionSql MaConnexionSql
ParametreSql(NumeroDepartement2 : Entier, SalaireMoyen2 : Reel Sortie)
SqlStatique
SELECT scott.MaFonction(${NumeroDepartement2}) INTO ${SalaireMoyen2} FROM scott.dual;
Fin SqlStatique
OrdreSql
/******/
MonOrdreSql2 ConnexionSql MaConnexionSql
ParametreSql(NomEmploye : Nul Ou Caractere TailleMaxSql 20, DateEmbauche : Nul Ou Date, NumeroEmploye : Nul Ou Entier, NumeroDepartement : Nul Ou Entier, Salaire : Nul Ou Reel)
SqlStatique
INSERT INTO scott.emp(ename, hiredate, empno, deptno, sal)
VALUES (${NomEmploye}, ${DateEmbauche}, ${NumeroEmploye}, ${NumeroDepartement}, ${Salaire});
MonOrdreSql3 ConnexionSql MaConnexionSql
SqlStatique
DELETE FROM scott.emp
WHERE deptno=40;
Debut
/* Lecture parametree et rang a rang sans reutilisation du curseur. */
ListerEmployes(10);
ListerEmployes(20);
ListerEmployes(30);
Ecran.Ecrire(");
/* Lecture parametree et par tableau avec reutilisation du curseur. */
ListerEmployes2(10);
ListerEmployes2(20);
ListerEmployes2(30);
Ecran.Ecrire(");
/* Modifications annulees. */
OrdreSql MonOrdreSql7 ConnexionSql MaConnexionSql
SqlStatique
INSERT INTO scott.emp(ename, hiredate, empno, deptno, sal)
VALUES ('youpi', {fn NOW()}, 9000, 40, 1000.00);
OrdreSql MonOrdreSql2 ParametreSql("youpi2", DateSysteme(), 9001, 40, 1001.00);
MaConnexionSql.Invalider();
ListerEmployes(40);
Ecran.Ecrire(");
/* Modifications validees. */
OrdreSql MonOrdreSql8 ConnexionSql MaConnexionSql
SqlStatique
INSERT INTO scott.emp(ename, hiredate, empno, deptno, sal)
VALUES ('youpi3', {fn NOW()}, 9100, 40, 1100.00);
OrdreSql MonOrdreSql2 ParametreSql("youpi4", DateSysteme(), 9101, 40, 1101.00);
MaConnexionSql.Valider();
ListerEmployes(40);
Ecran.Ecrire(");
/* Mise a jour par tableau. */
OrdreSql MonOrdreSql9 ConnexionSql MaConnexionSql
SqlStatique
UPDATE scott.emp SET sal=-sal;
MettreAJourSalaire();
ListerEmployes(10);
ListerEmployes(20);
ListerEmployes(30);
Ecran.Ecrire(");
/* Nettoyage des modifications. */
OrdreSql MonOrdreSql3;
MaConnexionSql.Valider();
/* Appel d'une procedure stockee. */
BlocSql MonBlocSql ParametreSql(10, SalaireMin, SalaireMax);
Ecran.Ecrire("SalaireMin="+Caractere(SalaireMin));
Ecran.Ecrire("SalaireMax="+Caractere(SalaireMax));
/* Appel d'une procedure stockee dans un paquet. */
BlocSql MonBlocSql3 ConnexionSql MaConnexionSql
ParametreSql(NumeroDepartement2 : Entier=20, SalaireMin2 : Reel Sortie=SalaireMin, SalaireMax2 : Reel Sortie=SalaireMax)
SqlStatique
{call scott.MaProcedure(${NumeroDepartement2}, ${SalaireMin2}, ${SalaireMax2})};
Fin SqlStatique
Ecran.Ecrire("SalaireMin="+Caractere(SalaireMin));
Ecran.Ecrire("SalaireMax="+Caractere(SalaireMax));
/* Appel d'une fonction stockee. */
BlocSql MonBlocSql2 ParametreSql(10, SalaireMoyen);
Ecran.Ecrire("SalaireMoyen="+Caractere(SalaireMoyen));
/* Appel d'une fonction stockee dans un paquet. */
BlocSql MonBlocSql4 ConnexionSql MaConnexionSql
ParametreSql(NumeroDepartement3 : Entier=20, SalaireMoyen2 : Reel Sortie=SalaireMoyen)
SqlStatique
SELECT scott.MaFonction(${NumeroDepartement3}) INTO ${SalaireMoyen2} FROM scott.dual;
Fin SqlStatique
Ecran.Ecrire("SalaireMoyen="+Caractere(SalaireMoyen));
Ecran.Ecrire(");
/* Textes longs. */
OrdreSql MonOrdreSql10 ConnexionSql MaConnexionSql
SqlStatique
DELETE FROM scott.emp_desc;
MaConnexionSql.Valider();
InsererDescription();
ListerDescriptions();
/* Images longs. */
OrdreSql MonOrdreSql11 ConnexionSql MaConnexionSql
SqlStatique
DELETE FROM scott.emp_pict;
MaConnexionSql.Valider();
InsererImage();
ListerImages();
Fin Principal