メニューボタン
IBMi海外記事2020.04.22

ACS 1.1.8.3のContent AssistのSQLプロンプト機能

Birgitta Hauser 著

SQLステートメントを実行するためのグリーン スクリーン機能であるSTRSQLは、その全盛期を終えています。それでも、多くのSQLユーザーには、今もなおAccess Client Solutions(ACS)の「SQLスクリプトの実行」機能よりも、このレガシーなインターフェースが好まれているようです。また、SQLステートメントを実行するのにサードパーティ ツールを使用しているユーザーもいます。よくある言い訳としては、「SQLスクリプトの実行」機能には、SQLコマンド、表、および列をプロンプトする方法がないというものです。ACSバージョン1.1.8.3では、Content AssistにSQLステートメントのプロンプト機能が加わっています。

ACSバージョン1.1.8.3より前には、「SQLスクリプトの実行」機能の中でプロンプト機能は利用できませんでした。表、ビュー、またはマテリアライズ照会表(MQT)にアクセスするには、データベース オブジェクトおよび列の名前を知っている必要がありました。また、データベース オブジェクトがどのスキーマ(ライブラリー)内に置かれているかについても知っている必要がありました。知らない場合は、SYSTABLESおよびSYSCOLUMNSビューに対して照会を実行して、データベース オブジェクト名や列名を検索できました。ただし、適切な情報が見つかったら、データベース オブジェクト名および列名を、手作業でコピーまたは入力する必要がありました。複雑な照会での、コピー&ペーストが多少改良されたことについてはご同意いただけるでしょう。誤入力は言うまでもありません。

幸いなことに、ACSの「SQLスクリプトの実行」機能にContent Assistが導入されたことで、こうした苦労は終わりました。

Content Assistとはどのようなものか

Content Assistは、様々なレベルでのSQLコマンドのプロンプターです。

  • コマンド: SELECT、INSERT、UPDATEなど、最もよく使用される標準的なSQLコマンドをプロンプトできます。
  • オブジェクト: SQLステートメント内から、表、ビュー、MQT、別名、物理および論理ファイル、および別名をプロンプトできます。
  • 列: 指定した表、ビュー、物理ファイル、および別名から列を選択できます。共通表式で生成される列を選択することも可能です。

Content Assistの場所と使い方

Content Assistは、「SQLスクリプトの実行」インターフェースの「編集」タブからアクセスできます。また、Control+スペース キーを押すことによっても、Content Assistを起動できます。

図1は、IBM i Access Client Solutionsのスタート メニューを示しています。このメニューから、「SQLスクリプトの実行」を開くことができます(「SQLスクリプトの実行」を起動できる場所は他にもあります)。また、図1には、「SQLスクリプトの実行」(Run SQL Scripts)での「編集(E)」>「Content Assist」オプションの場所が示されています。

フォルダ
図1: ACSのContent Assist - 「SQLスクリプトの実行」

標準的なSQLコマンドを選択する

空のスクリーンから、または、セミコロンで終わるSQLコマンドの後でContent Assistを起動すると、図2のような、定義済みのSQLコマンドのポップアップ リストが表示されます。

フォルダ
図2: 選択されるSQLの標準的なコマンド

目的のSQLコマンドを挿入するには、そのコマンドへ移動してダブルクリックします。挿入したSQLコマンドは、後で修正および補完することができます。

図3は、挿入された「SELECT with GROUPING」SQLコマンドを示しています。

フォルダ
図3: 挿入されたSQLコマンド: 「SELECT with GROUPING」

表、ビュー、MQT、別名、および物理ファイルを選択する

SQL SELECTステートメント内で、表、ビュー、MQT、および物理ファイルを選択することができますが、たとえば、UPDATEおよびDELETEなど、他のSQLコマンド内でも選択することができます。データベース オブジェクトのリストを取得するには、表またはビューが指定されている必要があるSQLコマンド内に移動してから、上述のいずれかの方法を使用してContent Assistを起動します。たとえば、SELECTステートメント内でデータベース オブジェクトのリストを取得するには、FROM節内に移動してから、Control Assistを起動する必要があります。SELECTステートメントに共通表式(CTE)が含まれる場合、ファイル選択は、最後のSELECT内だけでなく、CTE内でも機能します。

SQLの命名規則を使用しているときは、スキーマ仕様なしで、デフォルト/現行スキーマ内のすべてのデータベース オブジェクトがリストされます。デフォルト スキーマが、接続で、またはSET CURRENT SCHEMA SQLコマンドの実行によって明示的に設定されていない場合は、現行のユーザー プロファイルと同じ名前を持つそのスキーマ内のすべてのデータベース オブジェクトが表示されます。

システムの命名規則を使用しているときは、ライブラリー リスト内のスキーマ内にあるすべてのデータベース オブジェクトが表示されます。ライブラリー リスト内で一意であるデータベース オブジェクトは修飾されませんが、複数のスキーマ内にあるデータベース オブジェクトはすべて適切なスキーマで修飾されます。

F11キーを使用して、SQL名(長い名前)とシステム名(短い名前)を切り換えることができます。挿入するには、目的のデータベース オブジェクトをダブルクリックします。

Content Assistは、2つ目のウィンドウに、データベース オブジェクトに関する以下の詳細情報を表示します。

  • Table(表): 左のウィンドウ内にSQL名が表示される場合、右のウィンドウ内にシステム名が表示されます、また、その逆も同様です。
  • Type(タイプ): データベース オブジェクトのタイプ。つまり、表、ビュー、マテリアライズ照会表(MQT)、別名、物理または論理ファイル。
  • Schema(スキーマ): データベース オブジェクトが位置しているライブラリー/スキーマ。

この情報は、システムの命名規則が使用されていて、スキーマ仕様なしでデータベース オブジェクトがリストされるときには、特に重要です。

図4は、システムの命名規則が使用されているために、ライブラリー リスト内にあるすべてのデータベース オブジェクトを示しています。

フォルダ
図4: Content Assist - ライブラリー リスト内のすべてのデータベース オブジェクトを表示します

ライブラリー リスト内のすべてのデータベース オブジェクトをリストできるのは素晴らしい機能かもしれませんが、1つのスキーマ内またはライブラリー リスト内に、何百または何千ものデータベース オブジェクトが格納されている場合もよくあります。目的のデータベース オブジェクトが見つかるまでこれらのデータベース オブジェクトをすべてスクロールするのは、非常に厄介なことがあるため、部分的にリストできると非常に便利です。

システムの命名規則を使用していて、データベース オブジェクトが置かれているスキーマが分かっている場合は、スキーマ名の後ろにピリオドを付けてスキーマを指定してから、Content Assistを起動することができます。これで、リストに含まれるのは、指定したライブラリー内のデータベース オブジェクトのみになります。また、SQLの命名規則を使用している場合は、スキーマ名の後ろにピリオドを付けてスキーマを指定することもできます。

指定したスキーマは、ライブラリー リスト(システム命名規則)またはデフォルト スキーマ(SQL命名規則)内にある必要はありません。この方法を使用すると、任意のスキーマ内にあるデータベース オブジェクトを検索することができます。

図5では、COMSQLQRYスキーマ内のデータベース オブジェクトのみが表示されています。

フォルダ

リストを特定のスキーマに限定しても、返されるデータベース オブジェクトが多過ぎることもあります。きめ細かく選択するには、データベース オブジェクトの名前の最初の数文字を指定することができます。指定した文字をライブラリー リストで修飾することは、強制でありません。命名規則に応じて、ライブラリー リスト内またはデフォルト スキーマ内のいずれかにある、指定した文字で始まるすべてのデータベース オブジェクトが表示されます。データベース オブジェクト名の最初の数文字がスキーマで修飾されている場合は、指定したスキーマ内の同じ文字で始まるデータベース オブジェクトのみが表示されます。

図6は、現行ライブラリー リスト内にある、「SAL」で始まるすべてのデータベース オブジェクトのリストを示しています。複数のスキーマ内にあるデータベース オブジェクトは、適切なスキーマで修飾されます。

フォルダ
図6: Content Assist - ライブラリー リスト内の「SAL」で始まるすべてのデータベース オブジェクトをリストしています

列およびフィールドを選択する

Content Assistを起動して、列名を指定できる任意の場所で、列またはフィールドを選択することができます。たとえば、SELECTステートメントでは、SELECTリスト内、FROM節内、WHERE条件内、GROUP BY節内、HAVING節内、およびORDER BY節内で、Content Assistを使用することができます。また、共通表式およびネストされた副選択では、適切な位置でContent Assistを起動することも可能です。

1つの列を選択することもできますし、複数の列をハイライトして、1つのステップで、それらすべてをコンマ区切りで挿入することもできます。また、現在リストされているすべての列を選択するためのオプションもあります。このオプションは、すべてまたはほとんどの列がSELECTステートメント内で明示的にリストされている必要がある場合に、多くの列がある表またはビューで特に有用です。

F11キーを使用して、SQL名とシステム名を切り換えることができます。SQL列名が表示されている場合は、Content Assistは列のSQL名を挿入し、そうでない場合はシステム名を挿入します。関連のある共通表式から生成または選択されたものだけでなく、FROM節で指定されるデータベース オブジェクトのすべての列を挿入することができます。

列に関する以下の詳細情報が、別のウィンドウに表示されます。

  • Field(フィールド): 左のウィンドウ内に列のSQL名が表示される場合、右のウィンドウ内にシステム名が表示されます、また、その逆も同様です。
  • Type(タイプ): 列のデータ タイプ。データ タイプによっては、長さおよび小数部の桁数。
  • CCSID: すべての文字データ タイプでCharacter-Set-ID(文字セットID)が表示されます(シングル バイトおよびダブル バイトの両方)。
  • Nullable(NULL可能): 列がNULLを格納できるどうか。
  • Table(表): 列がある、表、ビュー、MQT、別名、物理または論理ファイル。
  • Schema(スキーマ): データベース オブジェクトのスキーマ。
  • Comment(コメント): データベース オブジェクトについてのより詳細な情報(定義されている場合)。

図7は、「SALESCUST」ビューのすべての列を示しています。右のウィンドウには、ハイライトされている列についての詳細情報が表示されています。「 All Columns 」に移動してダブルクリックすると、Content Assistはすべての列名をコンマ区切りで挿入します。

フォルダ

複数のファイルが結合される場合は、結合されるすべてのファイルのすべての列名が表示されます。複数のファイルで利用可能な列名は、ファイル名で修飾されます。ファイルに相関名がある場合は、列はファイル名ではなく相関名で修飾されます。図8では、FROM節のSALES表の相関名はS、ADDRESSX表の相関名はAとなっています。すべての列名は、列リスト内の相関名で修飾されます。

フォルダ
図8: Content Assist - 相関名を持つ列のリスト

列名のサブセットのみを表示することができます。データベース オブジェクト名または相関名の後にピリオドを付けることができます。この場合は、このデータベース オブジェクトまたは共通表式内のすべての列が表示されます。

また、適切な列名の先頭を指定してから、Content Assistを起動することもできます。指定した文字で始まる列名のみが表示されます。図9では、「CUST」で始まり、結合された表の1つにある列が表示されています。CUSTNO列は、SALES表内にありますが、ADDRESSX表内にもあります。どちらの表にも相関名がないため、CUSTNO列は関連のある表名で修飾されます。

フォルダ
図9: Content Assist - すべての列名のサブセットを選択します

終わりに

Content Assistはまだ完全ではありませんが、IBMでは開発作業を続けています。IBM i Access Client Solutionsの次のバージョンでは、数多くの機能強化が期待されます。あったらうれしい機能が追加されることが望まれます。とは言っても、ACSバージョン1.1.8.3のContent Assistは、SQLステートメントのコーディングを強力に支援する優れたツールです。

Content Assistは、グリーン スクリーンのSTRSQL機能のプロンプトに比べて、はるかに多くの情報を提供し、簡単に使用できます。もはや、旧式のグリーン スクリーン機能に留まったり、サードパーティのツールを使用したりする理由はありません。まだIBM i Access Client Solutionsを使用していないか、まだACSバージョン1.1.8.3にアップグレードしていない場合には、次のリンクからダウンロードしてインストールすることができます。

https://www.ibm.com/support/pages/ibm-i-access-client-solutions

ぜひとも、Content Assistを使用してみてください。

あわせて読みたい記事

PAGE TOP