見出し画像

シェルからSQL実行する(Apache Derby-01,MAC,zsh,Java19)

概要

Apache Derby付属のijに標準入力からSQLコマンドをインメモリモードで起動したApache Derbyに渡して実行結果を得る。
テスト用SQLはSYSIBM.SYSDUMMY1を使用した(OracleでDUALを使用する場合と同様)Select文で簡単な計算(5+4*3/2-1)の結果を表示するものを使用。
なお、以下では事前に PS1="%N %# " を実行して、コマンドプロンプトに実行シェルがなんであるか、すなわちzshであることを表示している。

-zsh % DERBY_HOME=~/Downloads/db-derby-10.16.1-2.1-bin 
-zsh % java -version
openjdk version "19.0.2" 2023-01-17
OpenJDK Runtime Environment Homebrew (build 19.0.2)
OpenJDK 64-Bit Server VM Homebrew (build 19.0.2, mixed mode, sharing)
-zsh % which java
/usr/local/opt/openjdk/bin/java
-zsh % export JAVA_HOME=/usr/local/opt/openjdk
-zsh % echo -n "select 5+4*3/2-1 from SYSIBM.SYSDUMMY1;exit;" | java -p ${DERBY_HOME}/lib -Dij.connection..="jdbc:derby:memory:.;create=true" -m org.apache.derby.tools/org.apache.derby.tools.ij
ijバージョン10.16
.* - 	jdbc:derby:memory:.
*=現行接続
ij> 1          
-----------
10         

1行が選択されました
ij> %
-zsh %   

シェルとコマンドの機能を使用して計算結果のみを標準出力に表示する。

-zsh % echo -n "select 5+4*3/2-1 from SYSIBM.SYSDUMMY1;exit;" | java -p ${DERBY_HOME}/lib -Dij.connection..="jdbc:derby:memory:.;create=true" -m org.apache.derby.tools/org.apache.derby.tools.ij | grep -A1 ^--- | grep -v ^---
10         
-zsh %

echoは-n抜きで改行が入っても、また、ijコマンドプロンプトを使用する場合の終了に必要なexitを省略しても、動作は変わらない。

-zsh % echo "select 5+4*3/2-1 from SYSIBM.SYSDUMMY1;" | java -p ${DERBY_HOME}/lib -Dij.connection..="jdbc:derby:memory:.;create=true" -m org.apache.derby.tools/org.apache.derby.tools.ij | grep -A1 ^--- | grep -v ^--- 
10         
-zsh % 

実行環境

-zsh % sw_vers
ProductName:		macOS
ProductVersion:		13.2
BuildVersion:		22D49
-zsh % zsh --version
zsh 5.8.1 (x86_64-apple-darwin22.0)
-zsh % java -version
openjdk version "19.0.2" 2023-01-17
OpenJDK Runtime Environment Homebrew (build 19.0.2)
OpenJDK 64-Bit Server VM Homebrew (build 19.0.2, mixed mode, sharing)
-zsh % echo ${PS1}
%N %# 
-zsh % java -p ${DERBY_HOME}/lib -Dij.connection..="jdbc:derby:memory:.;create=true" -m org.apache.derby.tools/org.apache.derby.tools.ij
ijバージョン10.16
.* - 	jdbc:derby:memory:.
*=現行接続
ij> exit;
-zsh % echo -n "VALUES SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY('DataDictionaryVersion');" | java -p ${DERBY_HOME}/lib -Dij.connection..="jdbc:derby:memory:.;create=true" -m org.apache.derby.tools/org.apache.derby.tools.ij
ijバージョン10.16
.* - 	jdbc:derby:memory:.
*=現行接続
ij> 1                                                                                                                               
--------------------------------------------------------------------------------------------------------------------------------
10.16                                                                                                                           

1行が選択されました
ij> %                                                                                          

参照

MacOS環境でJavaを使用する
MacOS環境のJavaでApache Derbyを使用する
WindowsコマンドプロンプトからSQL実行する(Apache Derby-02,Win,cmd,Java19)

この記事が気に入ったらサポートをしてみませんか?