Exemple d’utilisation du mapping RO directement dans un SGBDR à l’aide d’une vue multitabulaire

Cet exemple montre comment se passer du mapping RO des outils tiers en faisant directement la couche objet au sein du SGBDR par l’implémentations de vues et de déclencheurs INSTEAD OFF… (exemples sous MS SQL Server)

Les tables en jeu :


CREATE TABLE T_PERSONNE_PRS
(PRS_ID      INT NOT NULL IDENTITY PRIMARY KEY,
 PRS_NOM     CHAR(32) NOT NULL,
 PRS_PRENOM  VARCHAR(25));
 
CREATE TABLE T_EMPLOYE_EMP
(PRS_ID         INT NOT NULL PRIMARY KEY,
 EMP_MATRICULE  CHAR(8) NOT NULL);
GO
 
-- la vue de synthèse :
   
CREATE VIEW V_PRS_EMP
AS
SELECT P.PRS_ID, PRS_NOM, PRS_PRENOM, EMP_MATRICULE
FROM   T_PERSONNE_PRS AS P
       LEFT OUTER JOIN T_EMPLOYE_EMP AS E
            ON P.PRS_ID = E.PRS_ID
GO            
 
-- le déclencheur INSTEAD OF INSERT :
 
CREATE TRIGGER E_IU_EMP
ON V_PRS_EMP
INSTEAD OF INSERT
AS
 
DECLARE @INSERT TABLE (PRS_ID         INT,
                       PRS_NOM        CHAR(32),
                       PRS_PRENOM     VARCHAR(25),
                       EMP_MATRICULE  CHAR(8));
DECLARE @ID INT;
 
SELECT @ID = IDENT_CURRENT('T_PERSONNE_PRS') + COUNT(*)
FROM   inserted;
DBCC CHECKIDENT ('T_PERSONNE_PRS', RESEED , @ID);
 
WITH T AS
(SELECT @ID AS NID, PRS_NOM, PRS_PRENOM, EMP_MATRICULE,
        ROW_NUMBER() OVER (ORDER BY PRS_NOM, PRS_PRENOM) AS N
 FROM   inserted)
INSERT  INTO @INSERT
SELECT  @ID - N, PRS_NOM, PRS_PRENOM, EMP_MATRICULE
FROM    T;
 
SET IDENTITY_INSERT T_PERSONNE_PRS ON;
INSERT INTO T_PERSONNE_PRS (PRS_ID, PRS_NOM, PRS_PRENOM)
SELECT PRS_ID, PRS_NOM, PRS_PRENOM
FROM   @INSERT;
SET IDENTITY_INSERT T_PERSONNE_PRS OFF;
 
INSERT INTO T_EMPLOYE_EMP
SELECT PRS_ID, EMP_MATRICULE
FROM   @INSERT;
 
GO
 
-- l'insertion simultanée dans plusieurs tables par l'intermédiaire de la vue :
 
INSERT INTO V_PRS_EMP (PRS_NOM, PRS_PRENOM, EMP_MATRICULE)
VALUES ('Marcel', 'Dujonc', 'AABBCC'),
       ('Patrick', 'Duchmol', 'ZZYYYWW'),
       ('Arlette', 'Dutrou', '115599');  
       
SELECT * FROM V_PRS_EMP

CQFD !


--------
Frédéric Brouard, SQLpro - ARCHITECTE DE DONNÉES, http://sqlpro.developpez.com/
Expert bases de données relationnelles et langage SQL. MVP Microsoft SQL Server
www.sqlspot.com : modélisation, conseil, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence  * * * * *

MVP Microsoft SQL Server

3 réflexions au sujet de « Exemple d’utilisation du mapping RO directement dans un SGBDR à l’aide d’une vue multitabulaire »

Laisser un commentaire