Contrainte en SQL
Une question pas compliquée en sql mais je n'ai pas trouvé les réponses dans divers tutoriaux sauf peut être ici mais je ne peux pas encore le tester:
J'ai deux tables, disque et modèle.
Dans la table disque j'ai un champ disque_position et dans la table modèle j'ai un champ modele_max_disque.
Je veux une contrainte pour qu'à chaque fois que je rentre une ligne dans la table disque la valeur du champ disque_position soit strictement inférieur à la valeur du champ modele_max_disque
sachant que mon disque fait partie d'une machine qui elle a un modèle et donc une seule valeur de modele_max_disque.
Merci si quelqu'un comprend et résoud mon problème.
J'ai deux tables, disque et modèle.
Dans la table disque j'ai un champ disque_position et dans la table modèle j'ai un champ modele_max_disque.
Je veux une contrainte pour qu'à chaque fois que je rentre une ligne dans la table disque la valeur du champ disque_position soit strictement inférieur à la valeur du champ modele_max_disque
sachant que mon disque fait partie d'une machine qui elle a un modèle et donc une seule valeur de modele_max_disque.
Merci si quelqu'un comprend et résoud mon problème.
1 réponse
-
En SQL pur tu ne peux faire ce genre de truc propement.L'idéal est d'utiliser un langage procédurale, ex sous Oracle PL/SQL.
Bon si t'a pas le choix y'a une bidouille:
1. Cree une table temporaire tmp contenant les lignes à insérer
2. Fait l'insert avec comme clause where une sous requête faisant la jointure entre ta table tmp et ta table modèle max disque:
INSERT VALUES(...) INTO disque
WHERE ( clés) IN SELECT ( clés )
FROM modele_max_disque , tmp
WHERE modele_max_disque.disque_position > tmp.champ disque_position ;