前のクエリの結果を繰り返してデータベースクエリを実行します。

前のクエリの結果を繰り返してデータベースクエリを実行します。

私はUnixとbashスクリプトに初めて触れたので、これが愚かな質問であれば教えてください。

私はUnixプラットフォームでホストされているDB2を使用する会社で働き始めましたが、その会社のデータベース(IBM Design studioで作成)には不要なスキーマがたくさんありました。私はこれらのパターンを整理したいと思い、bashスクリプトがこれを行う最善の方法であると仮定します。

私が望むのは、データベースに問い合わせてスキーマ名を取得し、ある種のコレクションに保存し、コレクションを繰り返しながら各名前に対してdropコマンドを実行することです。

DB2コマンドには問題はありませんが(私の考えでは)、スクリプトから結果を取得する方法はわかりません。

これにより、問題のスキーマ名が検索されます。

db2 "SELECT schemaname FROM syscat.schemata WHERE schemaname like 'IWSCHEMA%'"

これにより、$ SCHEMA_TO_DROP変数に名前が割り当てられたスキーマが削除されます。

db2 "CALL SYSPROC.ADMIN_DROP_SCHEMA('$SCHEMA_TO_DROP', NULL, 'ST', 'ErrorTable')"

今やるべきことは2つを一緒につなぐだけですが、どこから始めるべきかわかりませんか?

ベストアンサー1

選択出力を変数に割り当ててから、forループを使用して各Schema_nameを繰り返すことができます。

/usr/bin/ksh

# Assign the output of the SELECT command to a local shell variable
SCHEMA_DROP_LIST=$(db2 "SELECT schemaname FROM syscat.schemata WHERE schemaname like 'IWSCHEMA%'")

# Loop over each schema_name
for SCHEMA_TO_DROP in $SCHEMA_DROP_LIST
do
     # Drop the schema, 1 at a time
     db2 "CALL SYSPROC.ADMIN_DROP_SCHEMA('$SCHEMA_TO_DROP', NULL, 'ST', 'ErrorTable')"

done

また、db2 dropコマンドの直後に$?変数を使用してリターンコードをキャプチャし、そのリターンコード(エコーエラーコード、終了など)に従ってアクションを実行することもできます。

おすすめ記事