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é.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top