Fonction CreerBlocSql(NomBlocSql : Caractere, SourceBlocSql : Caractere, TTP : Entier=1, TDG : Entier=0) Retourner Nul Ou IBlocSql;
Le nom du bloc Pl/Sql doit être unique. Il permet de tracer son exécution. Le source du bloc Pl/Sql doit respecter la syntaxe et la sémantique de la base de données cible, même pour le pilote Open DataBase Connectivity (ODBC).
Le source du bloc Pl/Sql peut être par exemple :
BEGIN
${SalaireMoyen}:=MaFonction(${NumeroDepartement});
END;
CREATE OR REPLACE PROCEDURE MaProcedure(NumeroDepartement IN NUMBER, SalaireMin OUT NUMBER, SalaireMax OUT NUMBER) AS
BEGIN
SELECT MIN(sal), MAX(sal) INTO SalaireMin, SalaireMax FROM emp WHERE deptno=NumeroDepartement;
END MaProcedure;
BEGIN;
SELECT ename:=${NomEmploye}, empno:=${NumeroEmploye} FROM emp WHERE deptno=${NumeroDepartement};
INSERT INTO emp(ename, empno, hiredate) VALUES (${NomEmploye}, ${NumeroEmploye}, ${DateEmbauche});
UPDATE emp SET sal=${Salaire} WHERE empno=${NumeroEmploye};
DELETE FROM emp WHERE deptno=${NumeroDepartement};
${SalaireMoyen}:=MaFonction(${NumeroDepartement});
END;
Le source du bloc Pl/Sql ne peut pas être :
COMMIT;
ROLLBACK;
Le source du bloc Pl/Sql peut comporter des paramètres d'entrée, de sortie ou d'entrée-sortie. Ils sont identifiés par des pseudo-variables correspondant aux noms déclarés par l'appel à la méthode DeclarerParametre.
Si le paramètre TTP spécifiant la taille des tableaux pour les paramètres a pour valeur 1, alors il y a un seul cycle d'exécution au niveau de la base de données.
Sinon les paramètres sont transmis par tableau dont la taille est donnée par TTP et il y a autant de cycles d'exécution au niveau de la base de données que de lignes dans le tableau.
La gestion des tableaux est automatisée pour rendre le principe de Bulk Processing transparent.
Si le paramètre TDG spécifiant le temps de garde en secondes est positif, alors il existe un délai pour exécuter l'ordre Sql.
Si la taille du source du bloc Pl/Sql dépasse la taille du paramètre TailleMaxOrdreSql, alors l'exception OrdreSqlTropGrand est envoyée.
Si une méthode d'un type implémentant l'interface IBlocSql échoue, alors l'exception ErreurOrdreSql est envoyée.
Principal
/*******/
Variable
/******/
MaConnexionSql : Nul Ou IConnexionSql;
MonOrdreSql : Nul Ou IOrdreSql;
Debut
...
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));
...
Fin Principal
- | - | - | - | - | - | - | - | - |