Up ! Query et Up ! Oracle - Version procédurale

Ce programme exécute des ordres Sql et Pl/Sql statiques pour Oracle.

Le fichier source est ${UPS_HOME}/upsqry/demo/${UPS_LANGUAGE}/oracle.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/oracle.sql doit être chargé pour la connexion scott/tiger.

Mode compilé

Commande de compilation

upscmp Source=oracle.upl

Commande d'exécution

oracle ConnexionOracle=scott/tiger

Mode interprété

upssng Source=oracle.upl ConnexionOracle=scott/tiger

Fichier source

Source Composant "Exemple d'emploi d'Up ! Oracle" Version 4.0.0;

ImporterModule
/************/
Procedure ListerEmployes(MaConnexionSql : Nul Ou IConnexionSql, NumeroDepartement : Entier)
/*****************************************************************************************/
Variable
/******/
Debut
Ecran.Ecrire("Département "+Caractere(NumeroDepartement));
Ecran.Ecrire("==============");
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql2", "SELECT ename:=${NomEmploye}, hiredate:=${DateEmbauche}, empno:=${NumeroEmploye}, sal:=${Salaire} FROM 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 Fin Pour
Fin Procedure

Procedure ListerEmployes2(MaRequeteSql : Nul Ou IRequeteSql, NumeroDepartement : Entier)
/**************************************************************************************/
Variable
/******/
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 Fin Pour
Fin Procedure

Procedure MettreAJourSalaire(MaConnexionSql : Nul Ou IConnexionSql)
/*****************************************************************/
Variable
/******/
Debut
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql3", "SELECT empno:=${NumeroEmploye}, sal:=${Salaire} FROM emp;", 5);
MaRequeteSql.DeclarerResultat("NumeroEmploye", Entier);
MaRequeteSql.DeclarerResultat("Salaire", Reel);
MaRequeteSql.PreparerSql();
MonOrdreSql=MaConnexionSql.CreerOrdreSql("MonOrdreSql4", "UPDATE 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 Fin Pour
MonOrdreSql.ExecuterSql();
MaConnexionSql.Valider();
Fin Procedure

Procedure InsererDescription(MaConnexionSql : Nul Ou IConnexionSql)
/*****************************************************************/
Variable
/******/
Debut
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql4", "SELECT empno:=${NumeroEmploye}, ename:=${NomEmploye} FROM emp WHERE deptno=10;", 5);
MaRequeteSql.DeclarerResultat("NumeroEmploye", Entier);
MaRequeteSql.DeclarerResultat("NomEmploye", Caractere, 20);
MaRequeteSql.PreparerSql();
MonOrdreSql=MaConnexionSql.CreerOrdreSql("MonOrdreSql5", "INSERT INTO emp_desc(empno, description) VALUES (${NumeroEmploye}, empty_clob()) RETURNING description INTO ${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 Fin Pour
MaConnexionSql.Valider();
Fin Procedure

Procedure ListerDescriptions(MaConnexionSql : Nul Ou IConnexionSql)
/*****************************************************************/
Variable
/******/
Debut
Ecran.Ecrire("Description");
Ecran.Ecrire("===========");
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql5", "SELECT empno:=${NumeroEmploye}, description:=${Description} FROM 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 Fin Pour
Fin Procedure

Procedure InsererImage(MaConnexionSql : Nul Ou IConnexionSql)
/***********************************************************/
Variable
/******/
Debut
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql6", "SELECT empno:=${NumeroEmploye}, ename:=${NomEmploye} FROM emp WHERE deptno=10;", 5);
MaRequeteSql.DeclarerResultat("NumeroEmploye", Entier);
MaRequeteSql.DeclarerResultat("NomEmploye", Caractere, 20);
MaRequeteSql.PreparerSql();
MonOrdreSql=MaConnexionSql.CreerOrdreSql("MonOrdreSql6", "INSERT INTO emp_pict(empno, picture) VALUES (${NumeroEmploye}, empty_blob()) RETURNING picture INTO ${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 Fin Pour
MaConnexionSql.Valider();
Fin Procedure

Procedure ListerImages(MaConnexionSql : Nul Ou IConnexionSql)
/***********************************************************/
Variable
/******/
Debut
Ecran.Ecrire("Description");
Ecran.Ecrire("===========");
MaRequeteSql=MaConnexionSql.CreerRequeteSql("MaRequeteSql7", "SELECT empno:=${NumeroEmploye}, picture:=${Photo} FROM 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 Fin Pour
Fin Procedure

Principal
/*******/
Variable
/******/
Debut
MaConnexionSql=ConnexionOracle("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 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 emp(ename, hiredate, empno, deptno, sal) VALUES ('youpi', sysdate, 9000, 40, 1000.00);");
MonOrdreSql=MaConnexionSql.CreerOrdreSql("MonOrdreSql7", "INSERT INTO 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 emp(ename, hiredate, empno, deptno, sal) VALUES ('youpi3', sysdate, 9100, 40, 1100.00);");
MonOrdreSql=MaConnexionSql.CreerOrdreSql("MonOrdreSql8", "INSERT INTO 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 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 emp WHERE deptno=40;");
MaConnexionSql.Valider();

/* Appel d'une procedure stockee. */
MonBlocSql=MaConnexionSql.CreerBlocSql("MonBlocSql", "BEGIN MaProcedure(${NumeroDepartement}, ${SalaireMin}, ${SalaireMax}); END;");
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 procedure stockee dans un paquet. */
MonBlocSql=MaConnexionSql.CreerBlocSql("MonBlocSql3", "BEGIN MonPaquet.MaProcedure2(${NumeroDepartement}, ${SalaireMin}, ${SalaireMax}); END;");
MonBlocSql.DeclarerParametre("NumeroDepartement", Entier);
MonBlocSql.DeclarerParametre("SalaireMin", Reel, ParametreSortie);
MonBlocSql.DeclarerParametre("SalaireMax", Reel, ParametreSortie);
MonBlocSql.PreparerSql();
MonBlocSql.EcrireParametre("NumeroDepartement", 20);
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", "BEGIN ${SalaireMoyen}:=MaFonction(${NumeroDepartement}); END;");
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));

/* Appel d'une fonction stockee dans un paquet. */
MonBlocSql=MaConnexionSql.CreerBlocSql("MonBlocSql4", "BEGIN ${SalaireMoyen}:=MonPaquet.MaFonction2(${NumeroDepartement}); END;");
MonBlocSql.DeclarerParametre("SalaireMoyen", Reel, ParametreSortie);
MonBlocSql.DeclarerParametre("NumeroDepartement", Entier);
MonBlocSql.PreparerSql();
MonBlocSql.EcrireParametre("NumeroDepartement", 20);
MonBlocSql.ExecuterSql();
MonBlocSql.LireParametre("SalaireMoyen", SalaireMoyen);
Ecran.Ecrire("SalaireMoyen="+Caractere(SalaireMoyen));
Ecran.Ecrire(");

/* Textes longs. */
MaConnexionSql.ExecuterOrdreSql("MonOrdreSql11", "DELETE FROM emp_desc;");
MaConnexionSql.Valider();
InsererDescription(IConnexionSql(MaConnexionSql));
ListerDescriptions(IConnexionSql(MaConnexionSql));

/* Images longs. */
MaConnexionSql.ExecuterOrdreSql("MonOrdreSql12", "DELETE FROM emp_pict;");
MaConnexionSql.Valider();
InsererImage(IConnexionSql(MaConnexionSql));
ListerImages(IConnexionSql(MaConnexionSql));
Fin Principal

Résultat de l'exécution

Département 10 ============== CLARK 09/06/1981 00:00:00 7,782 2,450.0000 KING 17/11/1981 00:00:00 7,839 5,000.0000 MILLER 23/01/1982 00:00:00 7,934 1,300.0000 Département 20 ============== SMITH 17/12/1980 00:00:00 7,369 800.0000 JONES 02/04/1981 00:00:00 7,566 2,975.0000 SCOTT 09/12/1982 00:00:00 7,788 3,000.0000 ADAMS 12/01/1983 00:00:00 7,876 1,100.0000 FORD 03/12/1981 00:00:00 7,902 3,000.0000 Département 30 ============== ALLEN 20/02/1981 00:00:00 7,499 1,600.0000 WARD 22/02/1981 00:00:00 7,521 1,250.0000 MARTIN 28/07/1981 00:00:00 7,654 1,250.0000 BLAKE 01/05/1981 00:00:00 7,698 2,850.0000 TURNER 08/09/1981 00:00:00 7,844 1,500.0000 JAMES 03/12/1981 00:00:00 7,900 950.0000 Département 10 ============== CLARK 09/06/1981 00:00:00 7,782 2,450.0000 KING 17/11/1981 00:00:00 7,839 5,000.0000 MILLER 23/01/1982 00:00:00 7,934 1,300.0000 Département 20 ============== SMITH 17/12/1980 00:00:00 7,369 800.0000 JONES 02/04/1981 00:00:00 7,566 2,975.0000 SCOTT 09/12/1982 00:00:00 7,788 3,000.0000 ADAMS 12/01/1983 00:00:00 7,876 1,100.0000 FORD 03/12/1981 00:00:00 7,902 3,000.0000 Département 30 ============== ALLEN 20/02/1981 00:00:00 7,499 1,600.0000 WARD 22/02/1981 00:00:00 7,521 1,250.0000 MARTIN 28/07/1981 00:00:00 7,654 1,250.0000 BLAKE 01/05/1981 00:00:00 7,698 2,850.0000 TURNER 08/09/1981 00:00:00 7,844 1,500.0000 JAMES 03/12/1981 00:00:00 7,900 950.0000 Département 40 ============== Département 40 ============== youpi3 09/12/2006 22:23:13 9,100 1,100.0000 youpi4 09/12/2006 22:23:13 9,101 1,101.0000 Département 10 ============== CLARK 09/06/1981 00:00:00 7,782 2,450.0000 KING 17/11/1981 00:00:00 7,839 5,000.0000 MILLER 23/01/1982 00:00:00 7,934 1,300.0000 Département 20 ============== SMITH 17/12/1980 00:00:00 7,369 800.0000 JONES 02/04/1981 00:00:00 7,566 2,975.0000 SCOTT 09/12/1982 00:00:00 7,788 3,000.0000 ADAMS 12/01/1983 00:00:00 7,876 1,100.0000 FORD 03/12/1981 00:00:00 7,902 3,000.0000 Département 30 ============== ALLEN 20/02/1981 00:00:00 7,499 1,600.0000 WARD 22/02/1981 00:00:00 7,521 1,250.0000 MARTIN 28/07/1981 00:00:00 7,654 1,250.0000 BLAKE 01/05/1981 00:00:00 7,698 2,850.0000 TURNER 08/09/1981 00:00:00 7,844 1,500.0000 JAMES 03/12/1981 00:00:00 7,900 950.0000 SalaireMin=1,300.0000 SalaireMax=5,000.0000 SalaireMin=800.0000 SalaireMax=3,000.0000 SalaireMoyen=2,916.6700 SalaireMoyen=2,175.0000 Description =========== 7,782 : CLARK - Ceci est un commentaire long sur le nom de l'employe. 7,839 : KING - Ceci est un commentaire long sur le nom de l'employe. 7,934 : MILLER - Ceci est un commentaire long sur le nom de l'employe. Description =========== 7,782 : 1171 7,839 : 1068 7,934 : 1204