シェルスクリプトでのSQL実行方法各種

(8.0.22)

echo "select now();" > a.sql

mysql test < a.sql

echo "select now();" | mysql test

mysql test <<EOF
select now();
EOF


いずれも実行後mysqlは終了する

 

(19c)

echo "select sysdate from dual;" > a.sql


sqlplus test/test@pdb1 @a.sql

sqlplus test/test@pdb1 < a.sql

echo "select sysdate from dual;" | sqlplus test/test@pdb1

sqlplus test/test@pdb1 <<EOF
select sysdate from dual;
EOF


標準入力使用の場合、実行後sqlplusは終了する
@使用の場合、実行後exitを入力しないとsqlplusが終了しない ★

 

(13)

echo "select clock_timestamp();" > a.sql


psql test -f a.sql

psql test < a.sql

echo "select clock_timestamp();" | psql test

psql test <<EOF
select clock_timestamp();
EOF


いずれも実行後psqlは終了する

 

(2019)

①OS: CentOS7


echo "select getdate();" > a.sql
echo "select getdate();" > b.sql
echo "go" >> b.sql

sqlcmd -U sa -P 'Aaa!1234' -S mmm061 -d test -i a.sql
→iオプションで指定する場合は、goがなくても結果が返る

sqlcmd -U sa -P 'Aaa!1234' -S mmm061 -d test < a.sql
→結果が返らない
sqlcmd -U sa -P 'Aaa!1234' -S mmm061 -d test < b.sql
→goがあると結果が返る

echo "select getdate();" | sqlcmd -U sa -P 'Aaa!1234' -S mmm061 -d test
→echoで渡す場合は、goがなくても結果が返る

sqlcmd -U sa -P 'Aaa!1234' -S mmm061 -d test <<EOF
select getdate();
EOF
→結果が返らない

sqlcmd -U sa -P 'Aaa!1234' -S mmm061 -d test <<EOF
select getdate();
go
EOF
→goがあると結果が返る



いずれも実行後sqlcmdは終了するが、goが必要となる場合がある。

 


②OS: Windows Server 2019

echo select getdate(); > a.sql
echo select getdate(); > b.sql
echo go >> b.sql

sqlcmd -U sa -P Aaa!1234 -S mmm061 -d test -i a.sql
→iオプションで指定する場合は、goがなくても結果が返る

sqlcmd -U sa -P Aaa!1234 -S mmm061 -d test < a.sql
→結果が返らない
sqlcmd -U sa -P Aaa!1234 -S mmm061 -d test < b.sql
→goがあると結果が返る

echo select getdate(); | sqlcmd -U sa -P Aaa!1234 -S mmm061 -d test
→echoで渡す場合は、goがなくても結果が返る


いずれも実行後sqlcmdは終了するが、goが必要となる場合がある。