2 votes

Comment utiliser un paramètre OUT / lire des données avec SELECT from table dans une procédure MySQL

Je suis nouveau dans la création de procédures dans MySql et je suis encore en train de l'apprendre. Je suis donc bloqué dans la création de procédures et j'ai besoin d'aide. La question peut sembler basique mais elle m'aidera à apprendre à partir des bases.

Question :
Je veux obtenir les détails de salary pour chaque pilote lorsque je spécifie son pilot_nbr .

La table pilote se compose de

  • pilot_nbr (clé primaire)
  • licence_nbr
  • nom de famille
  • prénom
  • titre
  • adresse
  • téléphone
  • bureau_nbr
  • type de contrat
  • salaire
  • manager_nbr

Exemples de données

'701', '7111', 'Dark', 'Jack', '1st officer', '6 street', '6042233445', '789', 'PTE', '145000.00', NULL 
'702', '7222', 'Mack', 'Bill', '1st officer', '7 street', '6043344556', '890', 'EMP', '155000.00', '701'
'703', '7333', 'Cheung', 'Charles', '2nd officer', '8street','6044455667','503','PTE','140000.00','701'  
'704', '7444', 'Gordon', 'Greg', '1st officer', '9 street', '6045566778', '123', 'EMP', '125000.00', '701'
'705', '7555', 'Basso', 'Nicki', '2nd officer', '5 street', '6046677889', '223', 'EMP', '163000.00', '701'
'706', '7666', 'Vettel', 'Sebast', '1st officer', '5 street', '6046677800', '523', 'EMP', '199000.00','701'
'707', '7777', 'Hawke','Mike','2ndofficer','7street','6046677326',423','EMP','139000.00','701'

Voici ce que j'ai fait et je suis resté bloqué :

DELIMITER //
CREATE PROCEDURE pilot_Salary_Procedure( IN pilot_Number INT(20), OUT pilot_Salary DECIMAL(10,2))
 BEGIN 
 DECLARE pilot_NummberVariable INT(20);
 SELECT pilot_nbr INTO pilot_NumberVariable
 FROM pilot  
 WHERE pilot_nbr = pilot_Number;
 END //

2voto

EagleRainbow Points 704

Je l'aurais fait de cette façon (en espérant que c'est ce que vous vouliez) :

DELIMITER //
CREATE PROCEDURE pilot_Salary_Procedure( IN pilot_Number INT(20), OUT pilot_Salary DECIMAL(10,2))
 BEGIN 
 SELECT salary INTO pilot_Salary
 FROM pilot  
 WHERE pilot_nbr = pilot_Number;
 END //

Vous pouvez alors exécuter cette procédure avec

call pilot_Salary_Procedure(701, @salary);

Le résultat est ensuite stocké dans la variable de session salary . Vous pouvez lire la valeur de cette variable en tapant

select @salary;

et obtiendrait donc 145000 comme résultat.

voir aussi http://dev.mysql.com/doc/refman/5.7/en/call.html

NB : Faites attention à vos types de données : La notation ci-dessus suggère que toutes vos valeurs dans la table sont des chaînes de caractères (par exemple CHAR ou VARCHAR). Bien que cela soit parfaitement acceptable pour des attributs tels que first_name , last_name o phone c'est dangereux pour les autres comme salary ou même des valeurs discrètes comme les identifiants ( pilot_nbr o manager_nbr ). En particulier salary devrait être un DECIMAL(15,2) ou similaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X