Ich versuche, eine SQL-Abfrage aus benutzerdefinierten Argumenten zu erstellen.
Nehmen wir an, der Schemaname, der Tabellenname und einige andere Bedingungen werden durch die Argumente angegeben.
schema='myschema'
table='testtable'
where_column='dob'
where_column2='firstname'
Aus den obigen Argumenten kann ich die folgende SQL-Anweisung generieren:
select * from myschema.testable where dob **i can add some value later** and firstname **some value**
Das nächste Mal verwenden wir die folgenden Argumente
schema='myschema'
table='testtable'
where_column='dob'
und wir sind nur am Filtern interessiert dob
. Die SQL-Abfrage wäre also
select * from myschema.testable where dob ** I can add some value later**
Ich stecke beim Erstellen fest. Wenn zwei where
Bedingungsargumente vorhanden sind, fügen Sie alles mit AND
dazwischen in die Abfrage ein. Wenn nur eine where
Bedingung angegeben ist, verwenden Sie nur diese.
Antwort1
Wäre das für Sie in Ordnung?
#!/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"
Das erste Argument ist schema.table
und die folgenden Argumente werden für die WHERE
Klausel verwendet.
Ausgabe:
$ ./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%';