Estou tentando fazer uma consulta SQL a partir de argumentos fornecidos pelo usuário.
Digamos o nome do esquema, o nome da tabela e algumas condições em que são fornecidas pelos argumentos.
schema='myschema'
table='testtable'
where_column='dob'
where_column2='firstname'
A partir dos argumentos acima, posso gerar a instrução SQL abaixo:
select * from myschema.testable where dob **i can add some value later** and firstname **some value**
Da próxima vez, usaremos os seguintes argumentos
schema='myschema'
table='testtable'
where_column='dob'
e estamos interessados apenas em filtrar arquivos dob
. Portanto, a consulta SQL seria
select * from myschema.testable where dob ** I can add some value later**
Estou preso construindo isso. Se houver dois where
argumentos de condição, coloque tudo na consulta AND
entre eles. Se apenas uma where
condição for fornecida, use apenas ela.
Responder1
Isso funcionaria para você?
#!/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"
O primeiro argumento é schema.table
e os seguintes argumentos são usados para a WHERE
cláusula.
Saída:
$ ./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%';