Я пытаюсь создать SQL-запрос из предоставленных пользователем аргументов.
Допустим, имя схемы, имя таблицы и некоторые условия задаются аргументами.
schema='myschema'
table='testtable'
where_column='dob'
where_column2='firstname'
На основе приведенных выше аргументов я могу сгенерировать следующий оператор SQL:
select * from myschema.testable where dob **i can add some value later** and firstname **some value**
В следующий раз мы воспользуемся следующими аргументами:
schema='myschema'
table='testtable'
where_column='dob'
и нас интересует только фильтрация dob
. Поэтому SQL-запрос будет таким:
select * from myschema.testable where dob ** I can add some value later**
Я застрял, создавая это. Если where
есть два аргумента условия, то поместите все в запрос с AND
между ними. Если where
указано только одно условие, то просто используйте только его.
решение1
Вас бы это устроило?
#!/bin/bash
from=$1; shift # remove the first argument from $@
for i; do
if [ -n "$where" ]; then # if "$where" is not empty then...
where+=" AND "
fi
where+="$i"
done
printf 'SELECT * FROM %s WHERE %s;\n' "$from" "$where"
Первый аргумент — это schema.table
и следующие аргументы используются для WHERE
предложения.
Выход:
$ ./script.sh myschema.table "dob = 'dib'"
SELECT * FROM myschema.table WHERE dob = 'dib';
$ ./script.sh myschema.table "dob = 'dib'" "firstname = 'Bhuvanesh'" "foo LIKE 'bar%'"
SELECT * FROM myschema.table WHERE dob = 'dib' AND firstname = 'Bhuvanesh' AND foo LIKE 'bar%';