目次
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 > 20SQLを入力したら、実際に整形してみましょう。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 >= 20CASE文のような、少し複雑な制御構文は、次のように整形されます。
【整形前】
SELECT CASE WHEN Age >= 20 THEN '成人' ELSE '未成年' END FROM Users【整形後】
SELECT
    CASE
        WHEN age >= 20 THEN
            '成人'
        ELSE
            '未成年'
    END
FROM
    usersJavaなどのコード用に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 > 20SQLエディタの上で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を使いこなして、効率的なプログラム開発をしていきましょう。
 
               
     
     
     
     
   
       
     
  