パラメータからSQLクエリを生成する

パラメータからSQLクエリを生成する

ユーザーが提供したパラメータに基づいて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**

私はこれを作るのをやめました。 2つの条件パラメータがある場合、whereクエリ内のすべてのエントリはAND中央に配置されます。条件が1つだけ提供されている場合は、その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%';

関連情報