Shellでsqlplusを使ってSQLを実行する方法

Shellでsqlplus実行 Shell

今日はShellでOracleを接続し、SQL文を実行する方法を紹介します。
SQL実行エラーの処理を含めて、参照いただけますと幸いです。

今回はEC2からRDSを接続し、SQL文を実行するため、事前にEC2から
RDSをsqlplusで接続できる状態を準備する必要です。
EC2からRDSをsqlplusで接続する設定は以下の内容を参照してください。

https://www.flyenginer.com/low/low_db/ec2からsqlplusでrdsを接続する設定.html

事前準備

sqlplusでRDSを接続する

sqlplus user_name/password@go

テーブル領域の作成

SQL>create tablespace TESTSPACE;
Tablespace created.
SQL>select
   tablespace_name,
   bytes/1024/1024 MB
from
   dba_data_files
where
   tablespace_name = ‘TESTSPACE’;
TABLESPACE_NAME                        MB
—————————— ———-
TESTSPACE                             100

テーブルの作成

create table emp (
    empno VARCHAR2(5),
 empname VARCHAR2(10),
 empage NUMBER(3),
 area NVARCHAR2(100),
 CONSTRAINT pk1 PRIMARY KEY(empno)
) TABLESPACE TESTSPACE;
Table created.

データの登録

BEGIN
   FOR i IN 1..300 LOOP
       INSERT INTO emp VALUES(lpad(i,5,0),’TEST’ || lpad(i,5,0),i,’東京’);  
   END LOOP;
   COMMIT;
END;
/
PL/SQL procedure successfully completed.

データの確認

SELECT COUNT(*) FROM emp;
  COUNT(*)
———-
       300

ヒアドキュメントでsqlplusを実行する方法1

cd /tmp
vi TestSqlplus.sh
#!/bin/bash
sqlplus -s user_name/password@go <<EOF
  SELECT COUNT(*) FROM emp;
EOF
exit $?
  COUNT(*)
———-
       300

ShellでSQLファイルを実行する方法2

#!/bin/bash
selFile=/tmp/selectEmp.sql
echo -e “SELECT COUNT(*) FROM emp;\n exit” > ${selFile}
sqlplus -s user_name/password@go @${selFile}
exit $?
  COUNT(*)
———-
       300

パイプで実行SQLを渡してsqlplusを実行する方法3

直接SQLの内容を渡す方法

#!/bin/bash
(
  for ((i=0;i<3;i++)); do
    echo -e “SELECT COUNT(*) FROM emp;\n”
  done
  echo “exit”
) | sqlplus -s user_name/password@go
exit $?
以下の結果は3回を取得できます。
  COUNT(*)
———-
       300

変数を作成してから、実行する。

#!/bin/bash
sql=””
for ((i=0;i<3;i++)); do
  sql=”${sql}SELECT COUNT(*) FROM emp;\n”
done
sql=”${sql}exit”
echo -e “${sql}” | sqlplus -s user_name/password@go
echo $?
以下の結果は3回を取得できます。
  COUNT(*)
———-
       300
タイトルとURLをコピーしました