1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| CREATE PROCEDURE S_DIAG.P_VERIFY
AS
-- variables de travail :
DECLARE @QRY_ID INT, -- id requête de vérification
@QRY_QUERY VARCHAR(max), -- texte SQL requête de vérification
@SQL VARCHAR(max), -- texte SQL de la requête d'exécution encapsulant la requête de vérification
@DT DATETIME; -- date heure d'exécution
DECLARE @T TABLE (C XML); -- variable table intermédiaire de travail
SET @DT = CURRENT_TIMESTAMP; -- assignation date heure
DECLARE C CURSOR -- déclaration curseur parcourant les règles
LOCAL FORWARD_ONLY STATIC READ_ONLY
FOR
SELECT QRY_ID, QRY_QUERY
FROM S_DIAG.T_QUERY_QRY;
OPEN C; -- ouverture curseur
FETCH C INTO @QRY_ID, @QRY_QUERY; -- lecture ligne courante dans le curseur
WHILE @@FETCH_STATUS = 0 -- boucle jusqu'à fin de ligne de table
BEGIN
DELETE FROM @T; -- vide table de travail
SET @QRY_QUERY = -- construction dynamique de la requête à exécuter
'SELECT CAST((SELECT *
FROM (' + @QRY_QUERY + ') AS T
FOR XML AUTO, ELEMENTS XSINIL, ROOT(''DIAGNOSTIC''), BINARY BASE64) AS XML) AS X'
INSERT INTO @T -- insertion résultat....
EXEC (@QRY_QUERY); -- ... d'éxécution dynamique dans table de travail
INSERT INTO S_DIAG.T_VERIFY_VRF -- insertion du contenu de la table de travail dans la table de vérification
(VRF_DATE, QRY_ID, VRF_RESULT)
SELECT @DT, @QRY_ID, C
FROM @T
WHERE C IS NOT NULL;
FETCH C INTO @QRY_ID, @QRY_QUERY; -- lecture ligne suivante dans le curseur
END;
CLOSE C; -- fermeture curseur
DEALLOCATE C; -- désallocation curseur
SELECT VRF_DATE, QRY_REGLE, VRF_RESULT -- affichage des résultats
FROM S_DIAG.T_VERIFY_VRF AS V
INNER JOIN T_QUERY_QRY AS Q
ON V.QRY_ID = Q.QRY_ID
WHERE VRF_DATE = @DT
ORDER BY Q.QRY_ID; |
Partager