Wie kann ich eine Variable zu einem MySQL-Skript übergeben?
Frage
Ich weiß, dass mit mysql Sie SQL-Anweisungen in eine SQL-Datei schreiben und die Datei aus dem mysql Befehlszeile wie folgt ausgeführt werden:
mysql> source script.sql
Wie gebe ich eine Variable, um das Skript? Zum Beispiel, wenn ich ein Skript ausgeführt werden soll, dass alle Mitarbeiter einer Abteilung abruft, möchte ich in der Lage sein, in der Anzahl der Abteilung passieren als eine Variable.
Ich versuche nicht, Abfragen über einen Shell-Skript auszuführen. Es gibt einfache Abfragen ich von der MySQL-Befehlszeile ausführen. Ich bin müde sie die ganze Zeit für das Abtippen und Schreiben ein Shell-Skript für sie wäre übertrieben.
Lösung
Wie folgt aus:
set @department := 'Engineering';
Dann Referenz @department
wo immer Sie brauchen, um in script.sql:
update employee set salary = salary + 10000 where department = @department;
Andere Tipps
#!/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
Sie können das gesamte Konzept wiederverwenden von aus dem folgenden Projekt
Sie sollten wirklich auf einem geeigneteren Weg suchen, dies zu tun. Ich gehe zu erraten, dass Sie MySQL-Abfragen über eine Shell-Skript auszuführen versuchen. Sie sollten stattdessen so etwas wie Perl oder PHP werden.