-- ---------------------------------------------------------------------------------
--
-- Examens : positions multiples
--
-- ---------------------------------------------------------------------------------
USE almoha ;
DROP VIEW IF EXISTS INTERROGATION_T ;
DROP VIEW IF EXISTS INTERROGATION_SCORE ;
DROP TABLE IF EXISTS SELECTION ;
DROP TABLE IF EXISTS INTERROGATION ;
DROP TABLE IF EXISTS QUESTIONNAIRE_PHRASE ;
DROP TABLE IF EXISTS QUESTIONNAIRE ;
DROP TABLE IF EXISTS PHRASES_NB ;
DROP TABLE IF EXISTS REPONDRE ;
DROP TABLE IF EXISTS CHOISIR ;
DROP TABLE IF EXISTS UTILISATEUR ;
DROP TABLE IF EXISTS CORRIGE ;
DROP TABLE IF EXISTS POSITION ;
DROP TABLE IF EXISTS PHRASE ;
DROP TABLE IF EXISTS DIFFICULTE ;
DROP TABLE IF EXISTS COMPOSITION ;
DROP TABLE IF EXISTS REGLE ;
DROP TABLE IF EXISTS ELEMENT ;
DROP TABLE IF EXISTS TYPE_ELEMENT ;
-------------------------------------------------------------------------------------------------
CREATE TABLE TYPE_ELEMENT
(
TypeElementId INT NOT NULL
, TypeElementLibelle VARCHAR(16) NOT NULL
, CONSTRAINT TYPE_ELEMENT_PK PRIMARY KEY (TypeElementId)
) ;
CREATE TABLE ELEMENT
(
ElementId INT NOT NULL
, TypeElementId INT NOT NULL
, ElementTexte VARCHAR(64) NOT NULL
, CONSTRAINT ELEMENT_PK PRIMARY KEY (ElementId)
, CONSTRAINT ELEMENT_TYPE_ELEMENT_FK FOREIGN KEY (TypeElementId)
REFERENCES TYPE_ELEMENT (TypeElementId) ON DELETE CASCADE
) ;
CREATE TABLE COMPOSITION
(
ElementComposantId INT NOT NULL
, ElementComposeId INT NOT NULL
, CONSTRAINT COMPOSITION_ELEMENT_COMPOSANT_FK FOREIGN KEY (ElementComposantId)
REFERENCES ELEMENT (ElementId) ON DELETE CASCADE
, CONSTRAINT COMPOSITION_ELEMENT_COMPOSE_FK FOREIGN KEY (ElementComposeId)
REFERENCES ELEMENT (ElementId)
) ;
CREATE TABLE REGLE
(
RegleId INT NOT NULL
, ElementId INT NOT NULL
, RegleTexte VARCHAR(64) NOT NULL
, NbPhrases INT NOT NULL
, CONSTRAINT REGLE_PK PRIMARY KEY (RegleId)
, CONSTRAINT REGLE_ELEMENT_FK FOREIGN KEY (ElementId)
REFERENCES ELEMENT (ElementId)
) ;
CREATE TABLE DIFFICULTE
(
DifficulteId INT NOT NULL
, DifficulteNiveau INT NOT NULL DEFAULT 1
, DifficulteTexte VARCHAR(32) NOT NULL
, CONSTRAINT DIFFICULTE_PK PRIMARY KEY (DifficulteId)
, CONSTRAINT DIFFICULTE_AK UNIQUE (DifficulteNiveau)
) ;
CREATE TABLE PHRASE
(
RegleId INT NOT NULL
, PhraseId INT NOT NULL
, DifficulteId INT NOT NULL
, Texte VARCHAR(96) NOT NULL
, CONSTRAINT PHRASE_PK PRIMARY KEY (RegleId, PhraseId)
, CONSTRAINT PHRASE_AK UNIQUE (RegleId, PhraseId, DifficulteId)
, CONSTRAINT PHRASE_REGLE_FK FOREIGN KEY (RegleId)
REFERENCES REGLE (RegleId)
, CONSTRAINT PHRASE_DIFFICULTE_FK FOREIGN KEY (DifficulteId)
REFERENCES DIFFICULTE (DifficulteId)
) ;
CREATE TABLE POSITION
(
RegleId INT NOT NULL
, PhraseId INT NOT NULL
, Position INT NOT NULL
, CONSTRAINT POSITION_PK PRIMARY KEY (RegleId, PhraseId, Position)
, CONSTRAINT POSITION_PHRASE_FK FOREIGN KEY (RegleId, PhraseId)
REFERENCES PHRASE (RegleId, PhraseId) ON DELETE CASCADE
) ;
CREATE TABLE PHRASES_NB
(
PhrasesNbId INT NOT NULL
, PhrasesNb INT NOT NULL
, CONSTRAINT PHRASES_NB_PK PRIMARY KEY (PhrasesNbId)
, CONSTRAINT PHRASES_NB_AK UNIQUE (PhrasesNb)
) ;
CREATE TABLE QUESTIONNAIRE
(
QuestionnaireId INT NOT NULL
, QuestionnaireCode CHAR(4) NOT NULL
, PhrasesNbId INT NOT NULL
, CONSTRAINT QUESTIONNAIRE_PK PRIMARY KEY (QuestionnaireId)
, CONSTRAINT QUESTIONNAIRE_AK UNIQUE (QuestionnaireCode)
, CONSTRAINT QUESTIONNAIRE_PHRASES_NB_FK FOREIGN KEY (PhrasesNbId)
REFERENCES PHRASES_NB (PhrasesNbId)
) ;
CREATE TABLE QUESTIONNAIRE_PHRASE
(
QuestionnaireId INT NOT NULL
, RegleId INT NOT NULL
, PhraseId INT NOT NULL
, DifficulteId INT NOT NULL
, CONSTRAINT QUESTIONNAIRE_PHRASE_PK PRIMARY KEY (QuestionnaireId, RegleId, PhraseId)
, CONSTRAINT QUESTIONNAIRE_PHRASE_PHRASE_FK FOREIGN KEY (RegleId, PhraseId, DifficulteId)
REFERENCES PHRASE (RegleId, PhraseId, DifficulteId)
, CONSTRAINT QUESTIONNAIRE_PHRASE_QUESTIONNAIRE_FK FOREIGN KEY (QuestionnaireId)
REFERENCES QUESTIONNAIRE (QuestionnaireId) ON DELETE CASCADE
) ;
CREATE TABLE UTILISATEUR
(
UtilisateurId INT NOT NULL
, UtilisateurCode CHAR(16) NOT NULL
, UtilisateurNom VARCHAR(32) NOT NULL
, CONSTRAINT UTILISATEUR_PK PRIMARY KEY (UtilisateurId)
, CONSTRAINT UTILISATEUR_AK UNIQUE (UtilisateurCode)
) ;
CREATE TABLE INTERROGATION
(
UtilisateurId INT NOT NULL
, QuestionnaireId INT NOT NULL
, Iteration INT NOT NULL DEFAULT 0
, DateExamen DATE NOT NULL
, Score INT NOT NULL DEFAULT 0
, CONSTRAINT INTERROGATION_PK PRIMARY KEY (UtilisateurId, QuestionnaireId, Iteration)
, CONSTRAINT INTERROGATION_UTILISATEUR_FK FOREIGN KEY (UtilisateurId)
REFERENCES UTILISATEUR (UtilisateurId)
, CONSTRAINT INTERROGATION_QUESTIONNAIRE_FK FOREIGN KEY (QuestionnaireId)
REFERENCES QUESTIONNAIRE (QuestionnaireId)
) ;
CREATE TABLE SELECTION
(
UtilisateurId INT NOT NULL
, QuestionnaireId INT NOT NULL
, Iteration INT NOT NULL
, RegleId INT NOT NULL
, PhraseId INT NOT NULL
, Position INT NOT NULL
, CONSTRAINT SELECTION_PK PRIMARY KEY (UtilisateurId, QuestionnaireId, Iteration, RegleId, PhraseId)
, CONSTRAINT SELECTION_INTERROGATION_FK FOREIGN KEY (UtilisateurId, QuestionnaireId, Iteration)
REFERENCES INTERROGATION (UtilisateurId, QuestionnaireId, Iteration)
, CONSTRAINT SELECTION_QUESTIONNAIRE_PHRASE_FK FOREIGN KEY (QuestionnaireId, RegleId, PhraseId)
REFERENCES QUESTIONNAIRE_PHRASE (QuestionnaireId, RegleId, PhraseId)
) ;
COMMIT ;
DELIMITER GO
DROP TRIGGER IF EXISTS INTERROGATION_BEFORE_INSERT ;
GO
CREATE TRIGGER INTERROGATION_BEFORE_INSERT BEFORE INSERT ON INTERROGATION
FOR EACH ROW
BEGIN
SET new.Iteration = (SELECT COALESCE(MAX(Iteration) + 1, 1)
FROM INTERROGATION
WHERE UtilisateurId = new.UtilisateurId
AND QuestionnaireId = new.QuestionnaireId
) ;
END
GO
DELIMITER ;
INSERT INTO TYPE_ELEMENT (TypeElementId, TypeElementLibelle) VALUES
(1, 'Partie'), (2, 'Sous-partie'), (3, 'Rubrique') ;
INSERT INTO ELEMENT (ElementId, TypeElementId, ElementTexte) VALUES
(1, 1, 'Formes et accords du verbe')
, (2, 1, 'Formes et accords du nom, de l''adjectif et de l''adverbe')
, (3, 1, 'Orthographe lexicale, signes graphiques et syntaxe')
, (4, 1, 'Ces mots que l''on confond')
, (5, 2, 'Le verbe : ses formes')
, (6, 2, 'Syntaxe')
, (7, 3, 'L''infinitif')
, (8, 3, 'Les noms : leur féminin, leur pluriel')
, (9, 3, 'L''imparfait du subjonctif')
, (10, 2, 'Le verbe, ses pièges')
, (14, 3, 'Rubrique-à-brac')
, (15, 2, 'sous-partie, piège à AK de PILE')
, (91, 1, 'Piège à récursivité') , (92, 1, 'Piège à récursivité')
, (93, 2, 'Piège à récursivité')
;
INSERT INTO COMPOSITION (ElementComposantId, ElementComposeId) VALUES
(5,1), (6, 3), (7, 5), (8, 2), (9, 5), (10, 1), (93, 92), (14, 1), (15, 1)
;
INSERT INTO REGLE (RegleId, ElementId, RegleTexte, NbPhrases) VALUES
(1, 8, 'Le pluriel des noms : cas généraux', 5)
, (2, 6, 'est-ce que', 15)
, (3, 4, 'a ; à', 2)
, (4, 4, 'ou ; où', 2)
, (5, 4, 'or ; hors', 4)
, (6, 9, 'La 3e personne du singulier', 5)
, (7, 9, 'La 3e personne du pluriel', 3)
, (8, 5, 'Une règle de la forme spéciale du verbe', 2)
, (9, 1, 'Accord dissonant du verbe', 2)
, (10, 14, 'règle-à-brac',5)
, (11, 10, 'rg11, enfant de SP10', 5)
, (12, 10, 'rg12, enfant de SP10', 5)
, (13, 10, 'rg13, enfant de SP10', 5)
, (14, 10, 'rg14, enfant de SP10', 5)
, (15, 1, 'règle, piège à AK de PILE', 2)
;
INSERT INTO DIFFICULTE (DifficulteId, DifficulteNiveau, DifficulteTexte) VALUES
(1, 1, 'Niveau 1'), (2, 2, 'Niveau 2'), (3, 3, 'Niveau 3') ;
-- SELECT * FROM DIFFICULTE ;
INSERT INTO PHRASE (RegleId, PhraseId, DifficulteId, Texte) VALUES
(1, 1, 1, 'rg1, ph1, le petit chat est morts')
, (1, 2, 2, 'Cette cérémonie reste un moment mémorable, au temps pour moi que pour mes enfants')
, (1, 3, 1, 'rg1, ph3, des yeux marrons')
, (1, 4, 2, 'rg1, ph4, il est huit heure')
, (1, 5, 3, 'rg1, ph5, Huit cent deux kilos')
, (3, 1, 2, 'rg3, ph1 , Je vais à Paris')
, (3, 2, 2, 'rg3, ph2, Pierre a faim')
, (3, 3, 3, 'rg3, ph3, Ce crayon est a moi')
, (4, 1, 1, 'rg4, Il et fort et agile')
, (4, 2, 1, 'rg4, Elle est grande')
, (4, 3, 3, 'rg4, Il aime le cuissot de chevreuil')
, (4, 4, 3, 'rg4, Il aime aussi le cuissot de veau')
, (4, 5, 3, 'rg4, C''est une imbécillité')
, (5, 1, 2, 'rg5, ph1')
, (5, 2, 2, 'rg5, ph2')
, (6, 1, 2, 'rg6, ph1, Qu''il aimât cela !')
, (6, 2, 3, 'rg6, ph2, Qu''il n''aimat pas cela !')
, (6, 3, 2, 'rg6, ph3, Qu''il eût aimé')
, (7, 1, 3, 'rg7, ph1, Qu''ils cinématographiassent cela !')
, (7, 2, 3, 'rg7, ph2, Qu''ils n''aimassent pas cela !')
, (7, 3, 2, 'rg7, ph3, Fallait-il que je vous aimasse')
, (7, 4, 2, 'rg7, ph4, et que je vous idolâtrasse')
, (7, 5, 2, 'rg7, ph5, pour que vous m''assassinassiez')
, (8, 1, 2, 'rg8, ph1')
, (8, 2, 2, 'rg8, ph2')
, (9, 1, 2, 'rg9, ph1')
, (9, 2, 1, 'rg9, ph2')
, (9, 3, 2, 'rg9, ph3')
, (10, 1, 2, 'rg10, ph1')
, (10, 2, 2, 'rg10, ph2')
, (10, 3, 1, 'Le Biglotron est un extrordinaire appareil')
, (10, 4, 3, 'Le flugdug prenant appui sur la muffée du connecteur à rustine')
, (11, 1, 2, 'rg11, ph1')
, (11, 2, 2, 'rg11, ph2')
, (12, 1, 2, 'rg12, ph1')
, (12, 2, 2, 'rg12, ph2')
, (13, 1, 2, 'rg13, ph1')
, (13, 2, 2, 'rg13, ph2')
, (14, 1, 2, 'rg14, ph1')
, (14, 2, 2, 'rg14, ph2')
;
SELECT *, rand() as alea FROM PHRASE order by DifficulteId, alea ;
INSERT INTO POSITION (RegleId, PhraseId, Position) VALUES
(1, 1, 5)
, (1, 2, 7) -- multiple : 'au'
, (1, 2, 8) -- multiple : 'temps'
, (1, 3, 3)
, (1, 4, 4)
, (1, 5, 0)
, (3, 1, 0)
, (3, 2, 0)
, (3, 3, 0)
, (4, 1, 2)
, (4, 2, 0)
, (4, 3, 0)
, (4, 4, 5)
, (4, 5, 0)
, (5, 1, 0)
, (5, 2, 0)
, (6, 1, 0)
, (6, 2, 0)
, (6, 3, 0)
, (7, 1, 0)
, (7, 2, 2)
, (7, 3, 2)
, (7, 4, 0)
, (7, 5, 0)
, (8, 1, 0)
, (8, 2, 2)
, (9, 1, 0)
, (9, 2, 0)
, (9, 3, 0)
, (10, 1, 0)
, (10, 2, 0)
, (10, 3, 5)
, (10, 4, 0)
, (11, 1, 0)
, (11, 2, 0)
, (12, 1, 0)
, (12, 2, 0)
, (13, 1, 0)
, (13, 2, 0)
, (14, 1, 0)
, (14, 2, 0)
;
-- SELECT * FROM POSITION ;
INSERT INTO PHRASES_NB (PhrasesNbId, PhrasesNb) VALUES
(1, 50), (2, 100), (3, 200) ;
INSERT INTO QUESTIONNAIRE (QuestionnaireId, QuestionnaireCode, PhrasesNbId)
VALUES
(1, 'Q001', 1)
, (2, 'Q002', 2)
, (3, 'Q003', 1)
;
INSERT INTO QUESTIONNAIRE_PHRASE (QuestionnaireId, RegleId, PhraseId, DifficulteId)
VALUES
(1, 1, 1, 1) , (1, 1, 2, 2), (1, 1, 3, 1), (1, 10, 3, 1), (1, 10, 4, 3)
, (2, 1, 1, 1) , (2, 1, 2, 2), (2, 1, 3, 1), (2, 10, 3, 1), (2, 10, 4, 3)
;
SELECT *, RAND() AS Alea FROM QUESTIONNAIRE_PHRASE ORDER BY QuestionnaireId, DifficulteId, Alea ;
INSERT INTO UTILISATEUR (UtilisateurId, UtilisateurCode, UtilisateurNom) VALUES
(1, 'FN', 'Fernand'), (2, 'RV', 'Raoul'), (3, 'PV', 'Paul'), (4, 'almoha', 'Alain'), (5, 'fsmrel', 'François')
;
CREATE VIEW INTERROGATION_T (UtilisateurId, QuestionnaireId, Iteration, Score) AS
SELECT x.UtilisateurId, x.QuestionnaireId, x.Iteration, COUNT(*)*5 AS Score
FROM SELECTION AS x
WHERE EXISTS (SELECT ''
FROM POSITION AS y
WHERE x.Regleid = y.Regleid AND x.PhraseId = y.PhraseId AND x.Position = y.Position)
GROUP BY UtilisateurId, QuestionnaireId, Iteration
;
CREATE VIEW INTERROGATION_SCORE (UtilisateurCode, QuestionnaireCode, Iteration, Score) AS
SELECT UtilisateurCode, QuestionnaireCode, Iteration, Score
FROM UTILISATEUR AS u JOIN INTERROGATION_T AS t ON u.UtilisateurId = t.UtilisateurId
JOIN QUESTIONNAIRE AS v ON v.QuestionnaireId = t.QuestionnaireId
;
DELIMITER GO
DROP TRIGGER IF EXISTS SELECTION_AFTER_INSERT
GO
CREATE TRIGGER SELECTION_AFTER_INSERT AFTER INSERT ON SELECTION
FOR EACH ROW
BEGIN
UPDATE INTERROGATION
SET Score = Score + 5
WHERE UtilisateurId = new.UtilisateurId
AND QuestionnaireId = new.QuestionnaireId
AND Iteration = new.Iteration
AND new.RegleId = (SELECT RegleId FROM PHRASE WHERE RegleId = new.RegleId and PhraseId = new.PhraseId)
AND new.PhraseId = (SELECT PhraseId FROM PHRASE WHERE RegleId = new.RegleId and PhraseId = new.PhraseId)
AND new.Position IN (SELECT Position FROM POSITION WHERE RegleId = new.RegleId and PhraseId = new.PhraseId)
;
END
GO
DELIMITER ;
INSERT INTO INTERROGATION (UtilisateurId, QuestionnaireId, DateExamen) VALUES
(1, 1, '2015-10-14'), (1, 1, '2015-10-16') -- Fernand
, (2, 1, '2015-10-15'), (2, 1, '2015-10-15') -- Raoul
, (2, 2, '2015-10-17'), (2, 2, '2015-10-18') -- Raoul
;
-- vérif auto-incrémentation de Iteration
SELECT *, '' AS R1 FROM INTERROGATION ;
INSERT INTO SELECTION (UtilisateurId, QuestionnaireId, Iteration, RegleId, PhraseId, Position) VALUES
(1, 1, 1, 1, 2, 7) -- Fernand, Q1, iter1, Rg1, Ph2, Pos 7 ok
, (1, 1, 1, 10, 3, 5) -- Fernand, Q1, iter1, Rg10, Ph3, Pos 5 ok
, (1, 1, 1, 10, 4, 99) -- Fernand, Q1, iter1, Rg10, Ph4, Pos 99 erreur
, (2, 1, 1, 1, 2, 99) -- Raoul, Q1, iter1, Rg1, Ph2, Pos 99 erreur
, (2, 1, 1, 10, 3, 99) -- Raoul, Q1, iter1, Rg10, Ph3, Pos 99 erreur
, (2, 1, 1, 10, 4, 99) -- Raoul, Q1, iter1, Rg10, Ph4, Pos 99 erreur
, (2, 1, 2, 1, 2, 8) -- Raoul, Q1, iter2, Rg1, Ph2, Pos 8 ok
, (2, 2, 1, 1, 2, 8) -- Raoul, Q2, iter1, Rg1, Ph2, Pos 8 ok
, (2, 2, 1, 10, 3, 99) -- Raoul, Q2, iter1, Rg10, Ph3, Pos 99 erreur
, (2, 2, 1, 10, 4, 99) -- Raoul, Q2, iter1, Rg10, Ph4, Pos 99 erreur
, (2, 2, 2, 1, 2, 7) -- Raoul, Q2, iter2, Rg1, Ph2, Pos 7 ok
, (2, 2, 2, 10, 3, 5) -- Raoul, Q2, iter2, Rg10, Ph3, Pos 5 ok
, (2, 2, 2, 10, 4, 0) -- Raoul, Q2, iter2, Rg10, Ph4, Pos 0 ok
;
SELECT * FROM SELECTION ;
SELECT * FROM INTERROGATION_T ;
-- ------------------------------------------------------------------------------------------
-- ------------------------------------------------------------------------------------------
SELECT *, '' AS 'select simple' FROM SELECTION AS x JOIN PHRASE AS y ON x.RegleId = y.RegleId AND x.PhraseId = y.PhraseId ;
-- Généralisation à un candidat quelconque
DELIMITER GO
DROP PROCEDURE IF EXISTS ScoreCandidatCalcul
GO
CREATE PROCEDURE ScoreCandidatCalcul
(
IN RaoulCodeIn CHAR(16), QuestionaireCodeIn CHAR(4), IterationIn INT
)
BEGIN
SELECT COUNT(*) * 5 AS ScoreRaoul
FROM SELECTION AS x JOIN UTILISATEUR AS z ON x.UtilisateurId = z.UtilisateurId
JOIN QUESTIONNAIRE AS t ON x.QuestionnaireId = t.QuestionnaireId
WHERE UtilisateurCode = RaoulCodeIn AND QuestionnaireCode = QuestionaireCodeIn AND Iteration = IterationIn
AND EXISTS (SELECT ''
FROM POSITION AS y
WHERE x.RegleId = y.RegleId AND x.PhraseId = y.PhraseId AND x.Position = y.Position)
GROUP BY x.UtilisateurId, x.QuestionnaireId, x.Iteration
;
END
GO
DELIMITER ;
CALL ScoreCandidatCalcul('RV', 'Q002', 2) ;
--- Variante
SELECT *, '' AS ScorevARIANTEALLLL
FROM INTERROGATION_SCORE ;
DELIMITER GO
DROP PROCEDURE IF EXISTS ScoreCandidatCalculVariante
GO
CREATE PROCEDURE ScoreCandidatCalculVariante
(
IN RaoulCodeIn CHAR(16), QuestionaireCodeIn CHAR(4), IterationIn INT
)
BEGIN
SELECT Score
FROM INTERROGATION_SCORE
WHERE UtilisateurCode = RaoulCodeIn AND QuestionnaireCode = QuestionaireCodeIn AND Iteration = IterationIn
;
END
GO
DELIMITER ;
CALL ScoreCandidatCalculVariante('RV','Q002', 2) ;
SELECT * FROM INTERROGATION_SCORE ;
SELECT * FROM INTERROGATION ;
DELIMITER GO
DROP PROCEDURE IF EXISTS ScoronsJoyeusement
GO
CREATE PROCEDURE ScoronsJoyeusement
(
IN RaoulCodeIn CHAR(16), QuestionaireCodeIn CHAR(4), IterationIn INT
)
BEGIN
UPDATE INTERROGATION
SET Score = (SELECT COALESCE(MAX(Score), 0)
FROM INTERROGATION_SCORE
WHERE UtilisateurCode = RaoulCodeIn AND QuestionnaireCode = QuestionaireCodeIn AND Iteration = IterationIn)
WHERE UtilisateurId = (SELECT UtilisateurId FROM UTILISATEUR WHERE UtilisateurCode = RaoulCodeIn)
AND QuestionnaireId = (SELECT QuestionnaireId FROM QUESTIONNAIRE WHERE QuestionnaireCode = QuestionaireCodeIn)
AND Iteration = IterationIn
;
END
GO
DELIMITER ;
UPDATE INTERROGATION SET Score = 0 WHERE UtilisateurId = 2 ; -- on efface les calcul de Raoul et on recalcule
CALL ScoronsJoyeusement('RV', 'Q001', 1) ;
CALL ScoronsJoyeusement('RV', 'Q001', 2) ;
SELECT *, '' AS 'Proc Scorons 1' FROM INTERROGATION ;
CALL ScoronsJoyeusement('RV', 'Q002', 1) ;
SELECT *, '' AS 'Proc Scorons 2' FROM INTERROGATION ;
CALL ScoronsJoyeusement('RV', 'Q002', 2) ;
SELECT *, '' AS 'Proc Scorons 3' FROM INTERROGATION ;
Partager