Comment puis-je passer une variable à un script mysql?
Question
Je sais qu'avec mysql, vous pouvez écrire des instructions SQL dans un fichier .sql et exécuter le fichier à partir de la ligne de commande mysql, comme suit:
mysql> source script.sql
Comment puis-je passer une variable au script? Par exemple, si je souhaite exécuter un script permettant de récupérer tous les employés d’un service, je souhaite pouvoir transmettre le numéro du service sous forme de variable.
Je n'essaie pas d'exécuter des requêtes via un script shell. Je lance des requêtes simples à partir de la ligne de commande mysql. J'en ai assez de les retaper tout le temps, et écrire un script shell pour eux serait exagéré.
La solution
Comme ceci:
set @department := 'Engineering';
Ensuite, référencez @ département
là où vous en avez besoin dans script.sql:
update employee set salary = salary + 10000 where department = @department;
Autres conseils
#!/bin/bash
#verify the passed params
echo 1 cmd arg : $1
echo 2 cmd arg : $2
export db=$1
export tbl=$2
#set the params ... Note the quotes ( needed for non-numeric values )
mysql -uroot -pMySecretPaassword \
-e "set @db='${db}';set @tbl='${tbl}';source run.sql ;" ;
#usage: bash run.sh my_db my_table
#
#eof file: run.sh
--file:run.sql
SET @query = CONCAT('Select * FROM ', @db , '.' , @tbl ) ;
SELECT 'RUNNING THE FOLLOWING query : ' , @query ;
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
--eof file: run.sql
vous pouvez réutiliser le concept entier de du projet suivant
vous devriez vraiment chercher un moyen plus approprié de le faire. Je vais deviner que vous essayez d'exécuter des requêtes mysql via un script shell. vous devriez plutôt utiliser quelque chose comme PERL ou PHP.