Как передать переменную в скрипт MySQL? - PullRequest
21 голосов
/ 16 сентября 2008

Я знаю, что с помощью mysql вы можете записывать операторы SQL в файл .sql и запускать файл из командной строки mysql следующим образом:

mysql> source script.sql

Как передать переменную в скрипт? Например, если я хочу запустить скрипт, который извлекает всех сотрудников в отделе, я хочу иметь возможность передавать номер отдела в виде переменной.

Я не пытаюсь выполнять запросы через скрипт оболочки. Есть простые запросы, которые я запускаю из командной строки mysql. Я устал все время перепечатывать их, и написание сценария для них было бы излишним.

Ответы [ 3 ]

19 голосов
/ 16 сентября 2008

Как это:

set @department := 'Engineering';

Затем, ссылка @department везде, где вам нужно в script.sql:

update employee set salary = salary + 10000 where department = @department;
14 голосов
/ 04 августа 2014
    #!/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

Вы можете повторно использовать всю концепцию из из следующего проекта

0 голосов
/ 16 сентября 2008

вы действительно должны искать более подходящий способ сделать это. Я собираюсь догадаться, что вы пытаетесь выполнить запросы MySQL через сценарий оболочки. вместо этого вы должны использовать что-то вроде PERL или PHP.

...