Pour en venir à l’achat d’un camion, avec sa transmission et ses deux différentiels :
Il faut évidemment commencer par créer le camion. On sait que CAMION est une spécialisation de LOCALISATION, on doit donc d’abord créer une ligne dans la table LOCALISATION (cf. le post #25) :
INSERT INTO LOCALISATION (LocalisationNote) VALUES ('') ;
Dans un 2e temps, on crée une ligne dans la table CAMION :
INSERT INTO CAMION (LocalisationId, CamionImmat, CamionDateAchat)
SELECT MAX(LocalisationId), 'immat01', '2012-07-01' FROM LOCALISATION ;
Dans un 3e temps, si besoin, ajouter une ligne dans la table FUEL_CONSUMPTION :
INSERT INTO FUEL_CONSUMPTION (CamionId, LitersFuel, MileAgeKm)
SELECT CamionId, 10, 20
FROM CAMION WHERE CamionImmat = 'immat01'
Dans un 4e temps, on crée une ligne dans la table COMPOSANT pour le moteur puisqu’un moteur est un composant (à ce stade, la table COMPOSANT_TYPE est censée exister et être constituée) :
INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele)
SELECT ComposantTypeId, ''2012-07-01', 'Perkins', 'modèle 1'
FROM COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'moteur' ;
Si on veut avoir comme date d’achat du moteur la date d’achat du camion, l’INSERT précédent peut être remplacé par celui-ci :
INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele)
SELECT ComposantTypeId, (SELECT CamionDateAchat FROM CAMION WHERE CamionImmat = 'immat01'), 'Perkins', 'modèle 1'
FROM COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'moteur' ;
Dans un 5e temps, on crée une ligne dans la table MOTEUR :
INSERT INTO MOTEUR (ComposantId, MoteurNumeroSerie, MaxHorsePower)
SELECT MAX(ComposantId), 's01', 40
FROM COMPOSANT ;
Dans un 6e temps, on affecte le moteur au camion :
INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId)
SELECT ComposantId, ''2012-07-01', '9999-12-31'
, (SELECT CamionId
FROM CAMION WHERE CamionImmat = 'immat01')
FROM MOTEUR
WHERE MoteurNumeroSerie = 's01'
;
Toutes ces opérations sont reprises du post #25.
Si on veut avoir comme date d’installation du moteur la date d’achat du camion, l’INSERT précédent peut être remplacé par celui-ci :
INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId)
SELECT ComposantId, (SELECT CamionDateAchat FROM CAMION WHERE CamionImmat = 'immat01'), '9999-12-31'
, (SELECT CamionId
FROM CAMION WHERE CamionImmat = 'immat01')
FROM MOTEUR
WHERE MoteurNumeroSerie = 's01'
;
Pour la transmission, on procède comme pour le moteur :
INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele)
SELECT ComposantTypeId, ''2012-07-01', 'Leclerc', 'modèle 17'
FROM COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'transmission' ;
INSERT INTO TRANSMISSION (ComposantId, TransmissionNumeroSerie, TransmissionVitesses)
SELECT MAX(ComposantId), 'tr017', 3
FROM COMPOSANT ;
INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId)
SELECT ComposantId, '2012-07-01', '9999-12-31'
, (SELECT CamionId
FROM CAMION WHERE CamionImmat = 'immat01')
FROM TRANSMISSION
WHERE TransmissionNumeroSerie = 'tr017'
;
Avec à chaque fois la possibilité de remplacer la date d’installation « en dur » par la date d’achat du camion, comme dans les exemples qui précèdent.
Pour le 1er différentiel :
INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele)
SELECT ComposantTypeId, (SELECT CamionDateAchat FROM CAMION WHERE CamionImmat = 'immat01'), 'Naudin', 'diff. extra'
FROM COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'différentiel' ;
INSERT INTO DIFFERENTIEL (ComposantId, DifferentielNumeroSerie, DifferentielRatio)
SELECT MAX(ComposantId), 'dif043', 1
FROM COMPOSANT ;
INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId)
SELECT ComposantId, (SELECT CamionDateAchat FROM CAMION WHERE CamionImmat = 'immat01'), '9999-12-31'
, (SELECT CamionId
FROM CAMION WHERE CamionImmat = 'immat01')
FROM DIFFERENTIEL
WHERE DifferentielNumeroSerie = 'dif043'
;
2e différentiel
INSERT INTO COMPOSANT (ComposantTypeId, ComposantDateAchat, Fabriquant, Modele)
SELECT ComposantTypeId, (SELECT CamionDateAchat FROM CAMION WHERE CamionImmat = 'immat01'), 'Volfoni', 'diff. super'
FROM COMPOSANT_TYPE WHERE ComposantTypeLibelle = 'différentiel' ;
INSERT INTO DIFFERENTIEL (ComposantId, DifferentielNumeroSerie, DifferentielRatio)
SELECT MAX(ComposantId), 'dif044', 2
FROM COMPOSANT ;
INSERT INTO COMPOSANT_AFFECTATION (ComposantId, ComposantInstallationDate, ComposantDesInstallationDate, LocalisationId)
SELECT ComposantId, (SELECT CamionDateAchat FROM CAMION WHERE CamionImmat = 'immat01'), '9999-12-31'
, (SELECT CamionId
FROM CAMION WHERE CamionImmat = 'immat01')
FROM DIFFERENTIEL
WHERE DifferentielNumeroSerie = 'dif044'
;
Partager