Instruction. Exécution d'un ordre Programming Language / Structured Query Language (PL/SQL).
OrdreSql
ListeDOrdresSql
OrdreSql
permet de déclarer des ordres Programming Language / Structured Query Language (PL/SQL) statiques.
Un ordre Pl/Sql peut être déclaré globalement ou localement. Son accès peut être défini au moyen des instructions Prive, Protege et Public.
La déclaration de l'ordre Pl/Sql au niveau de la source de données relationnelles est établie tout le temps de la portée de la déclaration. Ainsi, un ordre Pl/Sql global est résidant, ce qui permet de factoriser les phases d'analyse et de calcul du plan effectuées par le moteur de la source de données pour plusieurs exécutions successives. La contre-partie est que le source de l'ordre Pl/Sql ne peut être que statique.
Un ordre Pl/Sql possède éventuellement des paramètres dont la liste est introduite par l'instruction ParametreSql. Il peut s'agir de paramètres d'entrée, d'entrée-sortie ou de sortie. Les paramètres sont identifiés dans le source de l'ordre Pl/Sql par des pseudo-variables de même nom.
Le source d'un ordre Pl/Sql est une commande Pl/Sql. Il est introduit par l'instruction SqlStatique.
Le source de la commande Pl/Sql est écrit en clair dans le programme. Il doit respecter la syntaxe et la sémantique du moteur de la source de données. Il se termine par le caractère point-virgule ; .
Une commande Pl/Sql peut être :
SELECT ename:=${NomEmploye}, hiredate:=${DateEmbauche}, empno:=${NumeroEmploye}, sal:=${Salaire}
FROM emp
WHERE deptno=${NumeroDepartement};
INSERT INTO emp(ename, hiredate, empno, sal)
VALUES (${NomEmploye}, ${DateEmbauche}, ${NumeroEmploye}, ${NumeroDepartement}, ${Salaire});
UPDATE emp set sal=${Salaire}
WHERE empno=${NumeroEmploye};
DELETE * FROM emp;
${SalaireMoyen}:=MaFonction(${NumeroDepartement})
DROP TABLE emp;
Employée en tant qu'instruction, OrdreSql
permet aussi d'exécuter directement un ordre Programming Language / Structured Query Language (PL/SQL).
L'ordre Pl/Sql peut être déclaré au niveau de la source de données relationnelles le temps de son exécution ou il a pu être déclaré au préalable. Dans ce second cas, les phases d'analyse et de calcul du plan effectuées par le moteur de la source de données ont déjà été effectuées.
L'ordre Pl/Sql ne peut produire de résultat.
L'ordre Pl/Sql statique possède éventuellement des paramètres dont la liste est introduite par l'instruction ParametreSql. Il s'agit de paramètres d'entrée, d'entrée-sortie ou de sortie. Les paramètres sont identifiés dans le source de l'ordre Sql par des pseudo-variables de même nom.
Le source d'un ordre Pl/Sql peut être :
Le source d'un ordre Pl/Sql doit respecter la syntaxe et la sémantique du moteur de la source de données.
Un ordre Pl/Sql est un objet implicite d'un type implémentant l'interface IOrdreSql. Le type est automatiquement déduit de la connexion associée à l'ordre Pl/Sql.
Pour connaître les propriétés et les méthodes de ce type, veuillez vous reporter à la fiche Description de l'interface IOrdreSql.
Variable
/******/
NomEmploye : Nul Ou Caractere;
DateEmbauche : Nul Ou Date;
NumeroDepartement : Entier;
NumeroEmploye : Entier;
Salaire : Reel;
ConnexionSql
/*******/
MaConnexionSql(Oracle, "scott/tiger");
OrdreSql
/******/
Public :
MonOrdreSql ConnexionSql MaConnexionSql
ParametreSql (NomEmploye : Nul Ou Caractere TailleMaxSql 20 Sortie, DateEmbauche : Nul Ou Date Sortie,
NumeroEmploye : Nul Ou Entier Sortie, Salaire : Nul Ou Reel Sortie, NumeroDepartement : Nul Ou Entier)
SqlStatique
SELECT ename:=${NomEmploye}, hiredate:=${DateEmbauche}, empno:=${NumeroEmploye}, sal:=${Salaire}
FROM emp
WHERE deptno=${NumeroDepartement};
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, NumeroEmploye2 : Entier)
SqlStatique
INSERT INTO emp(ename, hiredate, empno, sal)
VALUES (${NomEmploye}, ${DateEmbauche}, ${NumeroEmploye}, ${NumeroDepartement}, ${Salaire});
Protege :
MonOrdreSql3 ConnexionSql MaConnexionSql
SqlStatique
DELETE FROM emp
WHERE deptno=40;
MonOrdreSql4 ConnexionSql MaConnexionSql
ParametreSql (NumeroDepartement : Entier, SalaireMin : Reel Sortie, SalaireMax : Reel Sortie)
SqlStatique
MaProcedure(${NumeroDepartement}, ${SalaireMin}, ${SalaireMax});
Prive :
MonOrdreSql5 ConnexionSql MaConnexionSql
ParametreSql (NumeroDepartement : Entier, SalaireMoyen : Reel Sortie)
SqlStatique
${SalaireMoyen}:=MaFonction(${NumeroDepartement});
Principal
/*******/
...
/* Ordre Sql dont le source est statique. */
OrdreSql MonOrdreSql6 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,
NumeroEmploye2 : Entier) SqlStatique
INSERT INTO emp(ename, hiredate, empno, sal)
VALUES (${NomEmploye}, ${DateEmbauche}, ${NumeroEmploye}, ${NumeroDepartement}, ${Salaire});
...
/* Ordre Sql dont le source statique est factorise via l'objet semantique MonOrdreSql2. */
OrdreSql MonOrdreSql2 ParametreSql (NomEmploye, DateEmbauche, NumeroEmploye, NumeroDepartement, Salaire, NumeroEmploye);
...
/* Bloc Sql dont le source est calcule dynamiquement. */
OrdreSql MonOrdreSql7 ConnexionSql MaConnexionSql SqlDynamique
"INSERT INTO emp(ename, hiredate, empno, sal) VALUES ("+NomEmploye+", "+Caractere(DateEmbauche,"%jj-%mm-%A")+"}, "
+Caractere{NumeroEmploye,"&&")+", "+Caractere(NumeroDepartement, ""}+", "+Caractere(Salaire,"&&&&,##")+");";
...
Fin Principal
- | - | - | - | - | - | - | - | - |