update文実行前後に確認用select文をそれぞれ実行し、その結果をそれぞれ変数に格納した上で比較して差異がある事を確認したいです
解決したいこと
IT初心者です、どなたかご教授お願いいたします。
シェルスクリプト関連の質問になります。
特定のSQL文(select文)をupdate文実行前後でそれぞれ実施した上で、実行結果をそれぞれ変数に格納し、その変数の中身に相違があるかどうかをチェックする文を作成したいです。
例として
select.sql
update.sql
というsqlファイルがそれぞれあるとします
select.sql
SELECT status FROM a_table WHERE id = '826'
上記のselect文をA5M2にて実行すると下記の通りの実行結果が出てくる想定です
+----------+
| status |
+----------+
| inactive |
+----------+
上記を実行し確認した上で、下記のupdate.sqlを実行します。ここでは例としてstatusをactiveに変更するだけのものとします。
UPDATE a_table
SET
status = "active"
'update_ymdt = now()
WHERE
id = '826'
その後select.sqlを実行すると下記の実行結果が返ってくる想定とします。
+----------+
| status |
+----------+
| active |
+----------+
ここまでを踏まえた上で
update前のselect.sql実行結果をbeforeという変数に、
update後のselect.sql実行結果をafterという変数に格納し、
その変数同士を比較して差異があること(変更がちゃんとされている事)を確認するシェルスクリプト文を作成したいと考えております。
お手数ですが上記につきまして解決方法をご教授いただければと思います。
5Answer
selectの結果をテキストファイルに出力して、Visual Studio Codeで差分確認してはどうですか。
code --diff before_file after_file
ただし、列比較には不向きかも。
データベース、プロバイダは何でしょうか? UPDATE と SELECT を単一バッチで行う必要があるはずですが (UPDATE した直後に、誰か他人が UPDATE するかもしれないので)、Access などそれができないケースもあります。
こういった具体的な要件が固められている質問は、ChatGPTによって回答を引き出すのに向いていますね。
質問と回答の例を以下に示します。
【あなた】
update文実行前後に確認用select文をそれぞれ実行し、その結果をそれぞれ変数に格納した上で比較して差異がある事を確認するシェルスクリプトを書いてください。
select.sql
update.sql
というsqlファイルがそれぞれあるとします。【ChatGPT】
以下は、select.sqlとupdate.sqlというSQLファイルを使って、更新前後のデータを比較するシェルスクリプトです。このスクリプトは、select.sqlを実行して結果を変数に格納し、update.sqlを実行してから再びselect.sqlを実行し、その結果を別の変数に格納して、両者を比較します。
#!/bin/bash
# データベース接続情報
DB_HOST="your_db_host"
DB_USER="your_db_user"
DB_PASS="your_db_password"
DB_NAME="your_db_name"
# 更新前のSELECT結果を格納する変数
select_before=$(mysql -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME < select.sql)
# UPDATE文を実行
mysql -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME < update.sql
# 更新後のSELECT結果を格納する変数
select_after=$(mysql -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME < select.sql)
# 結果の比較
if [ "$select_before" != "$select_after" ]; then
echo "差異があります。"
echo "更新前のデータ:"
echo "$select_before"
echo "更新後のデータ:"
echo "$select_after"
else
echo "差異はありません。"
fi
確認が遅れてしまい失礼いたしました…
本件無事に解決いたしました、ありがとうございます!
Comments
どのような方法で解決されたのか、共有していただけたらと思います。
共有はここのサイトの目的でもありますので。