Estoy intentando realizar una consulta SQL a partir de argumentos proporcionados por el usuario.
Digamos que el nombre del esquema, el nombre de la tabla y algunas condiciones están dadas por los argumentos.
schema='myschema'
table='testtable'
where_column='dob'
where_column2='firstname'
A partir de los argumentos anteriores, puedo generar la siguiente declaración SQL:
select * from myschema.testable where dob **i can add some value later** and firstname **some value**
La próxima vez usaremos los siguientes argumentos.
schema='myschema'
table='testtable'
where_column='dob'
y sólo nos interesa filtrar dob
. Entonces la consulta SQL sería
select * from myschema.testable where dob ** I can add some value later**
Estoy atrapado construyendo esto. Si where
hay dos argumentos de condición, coloque todo en la consulta AND
entre ellos. Si solo where
se proporciona una condición, úsela únicamente.
Respuesta1
¿Eso funcionaría para ti?
#!/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"
El primer argumento es schema.table
y los siguientes argumentos se utilizan para la WHERE
cláusula.
Producción:
$ ./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%';