2008-09-16 9 views
21

Je sais que, avec MySQL, vous pouvez écrire des instructions SQL dans un fichier sql et exécutez le fichier à partir de la ligne de commande mysql comme ceci:Comment transmettre une variable à un script mysql?

mysql> source script.sql 

Comment puis-je passer une variable au script? Par exemple, si je veux exécuter un script qui récupère tous les employés d'un département, je veux pouvoir transmettre le numéro du département en tant que variable. Je n'essaie pas d'exécuter des requêtes via un script shell. Il y a des requêtes simples que je lance à partir de la ligne de commande mysql. Je suis fatigué de les retaper tout le temps, et écrire un script shell pour eux serait exagéré.

Répondre

17

Comme ceci:

set @department := 'Engineering'; 

Ensuite, référence @department où vous avez besoin dans script.sql:

update employee set salary = salary + 10000 where department = @department; 
-5

vous devriez vraiment être à la recherche d'une façon plus appropriée 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.

10
#!/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 isg_pub_en MetaEntity 
    # 
    #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 de from the following project

Questions connexes