私は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コマンドの直後に$?変数を使用してリターンコードをキャプチャし、そのリターンコード(エコーエラーコード、終了など)に従ってアクションを実行することもできます。