3.5 SQLワークシートの使用

SQLワークシートを使用すると、SQL、PL/SQLおよびSQLcl文を入力して実行できます。表の作成、データの挿入、トリガーの作成と編集、表からのデータの選択、表から選択したデータのファイルへの保存など、ワークシートに関連付けられたデータベース接続によって処理可能なすべてのアクションを指定できます。

SQLワークシートを表示するには、「接続」パネルで接続名を右クリックして「SQLワークシートを開く」を選択します。

SQLワークシートが開いているときに、既存のSQLファイルも開いている場合は、右下隅にある接続アイコンをクリックして接続を添付できます。接続がエディタまたはファイルに関連付けられると、接続の名前が右下隅に表示されます。

エディタでは、実行する1つ以上のSQLまたは文を入力できます。複数の文の場合、PL/SQL以外の各文は、セミコロンまたは(改行後の)スラッシュ(/)のいずれかで終了する必要があります。各PL/SQL文は、改行後にスラッシュ(/)で終了する必要があります。SQLキーワードは、自動的にハイライト表示されます。

表やビューなど、いくつかの種類のオブジェクトは、「接続」ナビゲータからドラッグし、エディタ・ペインにドロップできます。このとき、「オブジェクト名」、「選択」、「挿入」、「削除」、「更新」というオプションが表示されます。SELECTを選択すると、その表またはビューのすべての列を使用して、SELECT文が作成されます。その後、列リストの変更やWHERE句の追加などによって、文を編集できます。

[Ctrl]+[Space]を押すと、コンテキスト依存のポップアップ・ウィンドウが表示されます。これにより、挿入ポイントで補完可能な構文のリストが表示されます。これは、編集中のコードを自動補完するために使用できます。このリストは、挿入ポイントでのコードのコンテキストに基づきます。いつでも終了するには、[Esc]を押すか、入力を続行します。

SQLワークシートの右上隅には、次のアイコンがあります。

  • 文の実行(Ctrl+Enter): SQLワークシートのマウス・ポインタが置かれている文を実行します。SQL文には、VARCHAR2型のバインド変数および置換変数を含めることができます。変数の値を入力するためのポップアップ・ボックスが表示されます。出力は、下部ペインの「問合せ結果」タブの下に表示されます。

  • スクリプトの実行(F5)は、スクリプト・ランナーを使用してSQLワークシート内のすべての文を実行します。SQL文には、VARCHAR2型の置換変数(ただしバインド変数は除く)を含めることができます。置換変数の値を入力するためのポップアップ・ボックスが表示されます。出力は、下部ペインの「スクリプト結果」タブの下に表示されます。

  • SQLclで実行(Ctrl+Shift+Enter): SQLclコマンドライン・セッションを開き、出力を表示して、文またはスクリプトを実行します。

  • 実行計画 (F10): (EXPLAIN PLAN文を内部的に実行して)文の実行計画を生成します。結果は、下部ペインの「説明」タブの下に表示されます。

3.5.1 SQLワークシートでサポートされるSQLclコマンド

SQLワークシートでは、SQLclコマンドがサポートされています。SQLclコマンドは、データベースに渡される前に、SQLワークシートで解析する必要があります。SQLワークシートでサポートされていないコマンドは無視され、データベースに渡されません。

SQLclコマンドの詳細を参照するは、helpコマンドを入力できます。特定のコマンドまたはトピックの詳細を参照するには、それをパラメータとして含めます(help @、help exit、help予約語など)。コマンドがサポートされていない場合、制限事項または使用上のノートがある場合は、ヘルプ表示にこの情報が含まれます。

3.5.2 スクリプト・ランナー

スクリプト・ランナーでは、@、@@、CONNECT、EXIT、QUIT、UNDEFINE、WHENEVER、置換変数などのコマンドにアクセスできます。たとえば、c:\myscripts\mytest.sqlというスクリプトを実行するには、エディタで@c:\myscripts\mytestと入力して、「スクリプトの実行」アイコンを選択します。

スクリプト・ランナーを使用する際の考慮事項は、次のとおりです。

  • バインド変数は使用できません。(ただし、VARCHAR2、NUMBERおよびDATE型のバインド変数は使用できます。)

  • 置換変数では、&&variableという構文で永続的な変数値が割り当てられ、&variableという構文で一時的な(格納されない)変数値が割り当てられます。

  • EXITおよびQUITでは、コミットがデフォルトの動作ですが、ロールバックを指定することもできます。いずれの場合も、コンテキストはリセットされます。たとえば、WHENEVERコマンドの情報と置換変数の値はクリアされます。

  • DESCRIBEは、ほとんどのオブジェクト・タイプで機能しますが、すべてではありません。

3.5.3 実行計画

「実行計画の実行」アイコンをクリックすると生成される実行計画は、「実行計画」タブをクリックすると表示できます。実行計画とは、文を実行するために行われる一連の操作です。

「実行計画」ダイアグラム・ビューは、EXPLAIN PLAN文の結果のデフォルトの表であるPLAN_TABLEの内容をグラフィカルに表現したものです。

デフォルトでは、3つのレベルのステップがダイアグラムに表示されます。各ステップの下部にある+/-記号(ステップに子がある場合に使用可能)を使用して、展開または縮小できます。ダイアグラムのすべてのステップを表示するには、ツールバーのexpand_all_icon 「すべて展開」を使用します。

このダイアグラムには、次の詳細も示されています。

  • カーディナリティ(親ステップへの矢印の数値)。これは処理される行数です。
  • そのステップで適用された操作とオプション
  • 実行順序(実行順序の連番)
  • アクセス述語のCPUコスト(割合) (オレンジ色のバー)
  • ステップの合計CPUコスト(割合) (青色の円)
  • 推定I/Oコスト、処理バイト数およびコスト・メトリック

ステップ内の統計にマウスを重ねると、簡単な説明ポップアップが表示されます。

ツールバーのアイコンは次のとおりです。

  • テキスト・ビュー: 実行ステップをプレーン・テキスト形式で表示します。

    テキスト・ビューの場合、「プリファレンスの使用」の適切なオプションを選択して、実行計画に表示される詳細レベルを選択できます。

  • ダイアグラム・ビュー: ステップがフローチャート形式で表示されます。
  • ズームイン、ズームアウト: ダイアグラムでステップが選択されている場合、「ズームイン」アイコンをクリックすると、画面の中央にそのまま残ります。

  • 画面に合わせる: ダイアグラム全体を可視領域に合せます。

  • 実際のサイズ: ズーム・ファクタを1に設定します。

  • すべて展開: ダイアグラムのすべてのステップを表示します。

  • ダイアグラムのリセット: ダイアグラムを初期ステータスにリセットします。つまり、3つのレベルのステップのみが表示されます。

  • 情報の表示: 実行計画機能で使用されるSELECT文を表示します。

  • 表示できる最小の合計CPUコスト(%): 合計CPUコストが指定の値以上であるステップをフィルタするためのしきい値を定義します。

    0(ゼロ)から100の値を入力します。0のフィルタはありません。

  • 計画メモ: 実行計画のメモを表示します。

プロパティ

選択したステップをダブルクリックするか[Enter]を押して「プロパティ」スライダを開きます。このスライダには、そのステップの詳細が表示されます。各プロパティの詳細は、『Oracle Databaseリファレンス』PLAN_TABLEに関する項を参照してください。

「プロパティ」スライダには次が表示されます。

  • PLAN_TABLEから抽出されたそのステップに関するすべての情報(表形式)。Nullは除外されます。

    「JSON」を選択すると、JSON形式でプロパティを表示できます。

  • PLAN_TABLEOTHER_XML列の情報。

    情報はJSON形式で表示されます。

ナビゲーション

  • [Tab]キーを押して、実行順序のステップを移動します。選択したステップの周囲には青い枠線があります。

    逆方向に移動するには、[Shift]+[Tab]キーを押します。

    ステップが選択されていない場合、[Tab]キーを押すと、実行番号1のステップが選択されます。

  • ズーム・レベルに応じて、水平および垂直のスクロールバーを使用してダイアグラムの様々な部分を表示します。

    マウスの左ボタンをクリックしてそのままにして、ダイアグラムを上下にパンします。

    右下にあるscroll_iconアイコンを使用して、ダイアグラムの上部までスクロールします。

ダイアグラム・ナビゲータ

ダイアグラム・ナビゲータは右上隅にあり、ダイアグラムの小さいコピーを表します。長方形の枠線を使用すると、ズームインおよびズームアウト操作が可能になり、移動してダイアグラムの異なる部分を表示できます。

ダイアグラム・ナビゲータに、CPUコストが1%を超えるステップの降順のリストが表示されます。リスト内のステップをクリックしてダイアグラムの同じステップに移動し、他のステップのコンテキストでステップを確認できます。

3.5.4 タスク・モニター

ノート:

この機能は、データベース管理者ロールを持つユーザーの場合にのみ使用できます。

タスク・モニターでは、すべてのタスクの進捗をリアルタイムでモニターできるため、時間とリソースを効果的に管理できます。これは、大規模なデータ・インポート/エクスポート、複雑な問合せ、スクリプトの実行、データベース・メンテナンス・タスクなどの長時間実行タスクに非常に役立ちます。進捗および推定完了時間に基づいてタスクに優先度を設定できます。

「タスク・モニター」は、SQLワークシート出力パネルのタブであり、進行中および未完了のタスクのリストを表示します。通常、完了したタスクはリストに表示されなくなります。

実行中のタスクがない場合、「タスク・モニター」に「表示する内容がありません」のメッセージが表示されます。

タスク・モニター情報

タスクに表示される情報は、次のとおりです:

  • アイコン: アイコンを使用してタスクのステータスを視覚的に示します。
  • 接続: 接続の名前。

  • ステータス: タスクの現在のステータス。
    • 待機中: タスクは実行のためにキューに入れられています。

      これは、拡張機能設定の接続セッション共有オプションがOFFに設定されている場合にのみ発生します。

    • 作成済: タスクが作成され、実行を待機しています。

    • 実行中: タスクが実行中です。

    • 完了: タスクが完了しました。

    • エラー: タスクの実行時にエラーが発生しました。

  • 作成済: タスク作成のタイムスタンプ。

    エントリの上にマウスを重ねると、ステータス関連のタイムスタンプ情報(「作成済」、「開始日時」など)を含むポップアップが表示されます。

  • 経過時間: タスクのステータスによって異なります。ステータスが「作成済」の場合、「経過時間」は作成してから実行するのにかかった時間を表します。ステータスが「実行中」の場合、経過時間はリセットされ、タスクの実行にかかった時間が計算されます。

  • 説明: タスクを形成するSQL文またはスクリプト。

タスクを取り消すには、各タスク行を右クリックし、「取消」をクリックします。

3.5.5 SQL履歴

右下のペインの「SQL履歴」タブをクリックすると、実行したSQL文およびスクリプトのリストを表示できます。また、1つ以上の文をダブルクリックして、現在SQLワークシートにある文を置換するか、または現在SQLワークシートにある文に追加することもできます。リストは、最初に日付別に編成され、次に接続名別に編成されます。

SQL履歴リストには、パスワードが含まれる可能性のある文は表示されません。CONNECT、ALTER USERおよびCREATE DATABASE LINKがこれにあたりますが、これらに限定されません。

「SQL履歴の制限」プリファレンスを設定すると、履歴内の文の最大数を制御できます。

「SQL履歴」リストのSQL文が選択されると、「SQLワークシート」ペインでPL/SQLサブプログラムが自動的に開きます。

リスト内の文をソートするには、ソートする列ヘッダーをダブルクリックすると、文が昇順でソートされます。ヘッダーを再度ダブルクリックすると、降順にソートされます。列に適用されたソートを削除するには、もう一度列見出しをダブルクリックします。

検索機能を表示するには、「SQL履歴」ペインで[Ctrl]+[F] (MacOSの場合は[Cmd]+[F])を押します。

3.5.6 スニペットを使用した部分的なコードの挿入

スニペットとは、SQLファンクション、オプティマイザ・ヒント、様々なPL/SQLプログラミング技法などが含まれる部分的なコードです。スニペットは、構文のみの場合や、例が含まれる場合もあります。SQLワークシートを使用している場合や、PL/SQLファンクションまたはプロシージャを作成したり編集している場合に、スニペットを挿入および編集できます。

スニペットが、「接続」パネルの下部に表示されます。「展開」アイコンをクリックすると、各グループで使用可能なすべてのシンペット(集計関数や文字関数など)が表示されます。ほとんどの場合、各グループの部分的なコードは、その論理グループで利用可能なすべてのオブジェクトを表しているわけではなく、それぞれの部分的なコードのすべての書式およびオプションが表示されているわけでもありません。詳細は、Oracle Databaseのマニュアルを参照してください。

SQLワークシートのコード、またはPL/SQLファンクションまたはプロシージャのコードにスニペットを挿入するには、左下ペインからスニペットをドラッグし、コードの目的の場所にドロップします。SQLファンクションが現在のコンテキストで有効になるように構文を編集します。

たとえば、SELECTと入力し、「文字関数」グループからCONCAT(char1, char2)をドラッグできます。次に、CONCATファンクションの構文を編集して、文の残りの部分を入力します。

SELECT CONCAT(title, ' is a book in the library.') FROM books;

3.5.7 接続管理

リリース24.1.1以降、新しいSQLワークシートを開くと、データベースへの新しい専用接続が作成されます。つまり、SQLワークシート内で長時間実行されている問合せは、他のデータベース・リクエストをブロックしません。

この動作は、「プリファレンス」「添付ワークシートごとのセッション」設定を使用して制御できます。

  1. 「ファイル」メニューから、「プリファレンス」に移動し、サブメニューから「設定」を選択します。
  2. 「ユーザー」の下で「拡張機能」を展開し、「Oracle SQL Developer Extension for VS Code」を展開します。
  3. 右側のパネルの「データベース接続」の下の「添付ワークシートごとのセッション」フィールドで、ドロップダウン・リストから「オフ」を選択してこの設定を削除します。

    デフォルト設定は「オン」です。