SQL Developerとは
SQL Developerは、Oracle社が提供している、Oracle Datbase向けのデータベース開発ツールです。
GUIベースのツールで、テーブルの作成などのデータベース管理をGUI画面で行なったり、SQLの実行、データのインポート/エクスポートやPL/SQLの開発をしたりできます。
「SQL Developer」は、SQL*Plusのような「コマンドラインベース」のツールが苦手な人に向いており、Oracleデータベースの学習にも役立つツールで、世界中で150万人以上の人が利用するツールです。
整形(フォーマット)とは?
SQLを実行できるようなツールには、SQL文の整形機能が付いていることがあります。
整形機能は、ツールによってはフォーマットと呼ばれることもあり、SQL文に改行やインデントを適切に挿入し、人に見やすくしてくれる機能です。
例えば、以下のSQLを整形(フォーマット)すると、次のように見やすく編集してくれます。
--【整形前】
SELECT USER_ID, USER_NAME, AGE FROM USERS WHERE AGE > 20
--【整形後】
SELECT
USER_ID
, USER_NAME
, AGE
FROM USERS
WHERE AGE > 20
このように、SELECT句、FROM句、WHERE句などの区切りで適切に改行してSQLを見やすく編集し、サブクエリなどでは、インデントを挿入し階層を見やすく編集します。
Oracle社が提供するSQL Developerにも、SQLの整形機能があります。以降は、SQL DeveloperでSQLを整形する方法を解説していきます。
SQL DeveloperでSQLを整形する
今回は「Oracle SQL Developer 19c」の画面でSQLを整形する方法を解説していきます。(以前のバージョンのOracle SQL Developerでも基本的に手順は同じです)
SQLを整形する手順
まず、左側の「接続」メニューより、接続ユーザー名を選択し、[右クリック]→「SQLワークシートを開く」を選択し、右側のエリアにSQLを表示します。
SQLの整形を試す為にエディタにSQLを入力します。まずは以下のような簡単なSQLをエディタに入力しましょう。
SELECT USER_ID, USER_NAME, AGE FROM USERS WHERE AGE > 20
SQLを入力したら、実際に整形してみましょう。SQLエディタの上で[右クリック]→「書式」を選択します。
SQLの整形が実行され、整形後のSQLがエディタに反映されます。
複雑なSQLの整形
簡単なSQLは綺麗に整形されました。では、サブクエリやCASE文などの複数なSQLの場合、SQL Developerではどのように整形されるのか見ていきましょう。
まず、サブクエリ含むSQLを整形すると、次のような結果になります。
【整形前】
SELECT * FROM Users LEFT OUTER JOIN
(SELECT SUM(Scores.score), Scores.user_id FROM Scores WHERE Scores.user_id = Users.id)
WHERE Age >= 20
【整形後】
SELECT
*
FROM
users
LEFT OUTER JOIN (
SELECT
SUM(scores.score),
scores.user_id
FROM
scores
WHERE
scores.user_id = users.id
)
WHERE
age >= 20
CASE文のような、少し複雑な制御構文は、次のように整形されます。
【整形前】
SELECT CASE WHEN Age >= 20 THEN '成人' ELSE '未成年' END FROM Users
【整形後】
SELECT
CASE
WHEN age >= 20 THEN
'成人'
ELSE
'未成年'
END
FROM
users
Javaなどのコード用にSQLを整形する
SQL Developerは、SQLを見やすく整形する以外に、作成したSQLをJavaなどのプログラムに埋め込むためのコードに整形する機能まで備わっています。
例えば、Javaコード向けにSQLをフォーマットをかけると、次のようにString型の変数にSQL文を入れるためのコードが自動生成されます。
【フォーマットでJavaコードに変換】
String sql = "SELECT USER_ID\n"+
" , USER_NAME\n"+
" , AGE \n"+
"FROM USERS \n"+
"WHERE AGE > 20";
プログラム言語用にフォーマットする手順
では、SQL DeveloperでJavaなどのプログラム言語用にフォーマットする手順を見ていきましょう。
まず、左側の「接続」メニューより、接続ユーザー名を選択し、[右クリック]→「SQLワークシートを開く」を選択し、右側のエリアにSQLを表示します。
フォーマットを試すために、簡単なSQLをエディタに入力しましょう。
SELECT USER_ID, USER_NAME, AGE FROM USERS WHERE AGE > 20
SQLエディタの上でCtrl + Shift + F7キーを同時に押すと、次のような「SQLコードの埋込/公開」画面が表示されます。
今回は、Javaコード用にSQLをフォーマットするため、出力タイプに「Java」を選択し、OKボタンをクリックします。
SQLのフォーマットが実行され、JavaのString型の変数にSQLを埋め込むためのコードが生成されているのが、わかります。
String sql = "SELECT USER_ID, USER_NAME, AGE FROM USERS WHERE AGE > 20";
Java以外の出力タイプも選択できる
上の手順では、Javaコード用にSQLをフォーマットしましたが、SQL DeveloperではJava以外の出力タイプでもコードを生成できます。
出力タイプごとのSQLフォーマット内容は、次のようになります。
【Python】
var sql = "SELECT USER_ID\n"+
" , USER_NAME\n"+
" , AGE \n"+
"FROM USERS \n"+
"WHERE AGE > 20";
【PL/SQL】
sql varchar2(4000) := 'SELECT USER_ID '|| chr(10) ||
' , USER_NAME '|| chr(10) ||
' , AGE '|| chr(10) ||
'FROM USERS '|| chr(10) ||
'WHERE AGE > 20';
整形したSQLをクリップボードにコピー
通常、SQL DeveloperでSQLの整形を行うと、ワークシート上のSQLが直接変更されます。
ワークシート上のSQLを変更したくない場合は、フォーマットの出力先をクリップボードに変更することもできます。
クリップボードに出力すると、ワークシート上のSQLはそのままに、クリップボードにフォーマットされたSQLがコピーされます。
まとめ
Oracle社が提供しているSQL Developerで、SQLを整形する方法や、Javaをはじめとするプログラム言語用にSQLをフォーマットする方法について解説してきました。
ログファイルなどに出力されるSQLは、基本的に改行などがなく、1行にSQL文が出力されていることが多い為、そう言った時にSQL DeveloperのSQLの整形機能は非常に役にたちます。
便利なSQL Developerを使いこなして、効率的なプログラム開発をしていきましょう。