2008-09-16 53 views
21

Sé que con MySQL puede escribir sentencias SQL en un archivo .sql y ejecutar el archivo desde la línea de comandos de MySQL así:¿Cómo paso una variable a un script mysql?

mysql> source script.sql 

¿Cómo puedo pasar una variable a la secuencia de comandos? Por ejemplo, si quiero ejecutar un script que recupere todos los empleados en un departamento, quiero poder pasar el número del departamento como una variable.

No estoy tratando de ejecutar consultas a través de un script de shell. Hay consultas simples que ejecuto desde la línea de comandos mysql. Estoy cansado de volver a escribirlos todo el tiempo, y escribir un guión de shell para ellos sería exagerado.

Respuesta

17

De esta manera:

set @department := 'Engineering'; 

Entonces, @department referencia siempre que se necesite en el script.sql:

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

que realmente debería estar buscando en una forma más adecuada de hacerlo. Voy a adivinar que estás tratando de ejecutar consultas mysql a través de un script de shell. en su lugar deberías estar usando algo como PERL o 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 

puede volver a utilizar el concepto de from the following project

Cuestiones relacionadas