達人: 長いオブジェクト名と短いオブジェクト名の取得
2023 年 8 月 14 日 ボブ・コッツィ
何年も前のリリースで、IBM i はファイルとライブラリに対して「長い SQL 名」を受け取りました。 これらの新しい長い名前 (最大 128 文字) は SQL 愛好家には好評でしたが、主流の IBM i 開発者にはほとんど無視されました。 IBM i のバージョンが登場するたびに、10 文字を超える名前を持つ 1 つ以上のオブジェクトが使用されるショップが増えてきました。
最近、BOAT_TRAFFIC という名前のファイルを作成しました。 この名前は明らかに 10 文字を超えています。 SQL DDL (CREATE または REPLACE TABLE ステートメント) を使用してファイルを作成しました。 SQL DDL を使用することが、長い名前を持つオブジェクトを作成する唯一の現実的な方法です。IBM i システムのコマンド インターフェース (つまり、CL コマンド) は、長い名前をサポートするように拡張されていません。 これは CL またはコマンドの制限ではありません。 CL コマンドは常に 128 バイトの名前をサポートできました。実際、1980 年に私が初めてユーザー作成の CL コマンドを作成したとき、誤ってオブジェクト名パラメーターに長さ 32 を指定してしまい、それが機能しました。 長いオブジェクト名とライブラリ名をサポートするためにコア CL を更新することは「決して起こらない」ようです。
BOAT_TRAFFIC ファイル (つまりテーブル) の作成に使用した SQL DLL の短縮バージョンを次に示します。
このファイルを開発者ライブラリまたはバックアップ ライブラリにコピーする場合、通常はコンテキストに応じて CRTDUPOBJ または CPYF を使用します。 開発者ライブラリ内のデータを現在のデータで更新するため、CPYF を使用するとします。 最終的には、次の画像のようなコマンド入力画面が表示されます。
実際に SQL を使用してコピー操作を行うことができました。 まずターゲット ファイル内のデータをクリアしてから、SQL INSERT ステートメントを使用して新しいデータをコピーする必要があります。 おそらく次のようなものでしょう:
この種の機能が有効であると言うのは、(A) TRUNCATE または同様のステートメントを使用してターゲット ファイルをクリアし、(B) IDENTITY 列を収容しながらレコードをコピーする必要があるためです。 そのためには、次のように OVERRIDING XXX VALUE を INSERT ステートメントに追加します。
通常、IDENTITY 列を持つファイルに行が追加されると、データベースは IDENTITY 列を自動的に増分します。 これを回避するには、OVERRIDING USER VALUE 句または OVERRDING SYSTEM VALUE 句を使用できます。
OVERRIDING USER VALUE は、INSERT のサブクエリ (つまり、SELECT ステートメント) に IDENTITY 列の値が含まれているが、システムがその値を無視し、新しく追加された行ごとに新しい値を生成することを意味します。
OVERRIDING SYSTEM VALUE は、INSERT のサブクエリ (つまり、SELECT ステートメント) に IDENTITY 列の値が含まれており、システムがその値をターゲット ファイルにコピーして保持することを意味します。
この例では明らかに、OVERRIDING SYSTEM VALUE が必要です。
SQL にはデータベース ファイル以外にも他のオブジェクトがあります。 SEQUENCE、ALIAS、FUNCTION、PROCEDURE など。これらはすべて、最大 128 バイトの長さの SQL 名をサポートします。 たとえば、SQL ALIAS を作成し、それに長い名前を付けたとします。 ALIAS オブジェクトは、IBM i ショップで通常メンバーの処理に使用されることがよくあります。 SQL はメンバーを認識しないため、IBM は ALIAS を拡張して、ファイルの特定のメンバーにアクセスできるようにしました。
この例では、CUSTOMS ライブラリに BOAT_TARIFF_BAHAMAS という名前の ALIAS を作成しました。 この ALIAS を SELECT ステートメントで使用して、TARIFF ファイルの BAHAMAS メンバーをクエリできます。 ALIAS は、他のすべての SQL タイプと同様に、IBM i システム オブジェクト名の長い名前を SQL カタログに保存します。
データベース ファイルは、ファイルのオブジェクト記述に長い SQL 名を格納し、QDBRTVFD API を介してその名前へのアクセスを提供します。 長い SQL 名の IBM i オブジェクト名を返す Retrieve Short Name (QDBRTVSN) という名前の別の API もあります。 ただし、これもデータベース ファイルにのみ適用され、最近ではライブラリ名にも適用されます。
長い SQL 名を持つ他のすべてのオブジェクト タイプは、SQL カタログ内で相互参照されます。 IBM では、カタログ名にかなり一貫した命名規則を使用しているため、クエリが必要なカタログをある程度簡単に思い出すことができます。 以下のカタログ ファイル名のリストには、すべての SQL オブジェクトと、暗黙的に SQL オブジェクトである多くの IBM i オブジェクト (物理ファイルや論理ファイルなど) のプロパティが含まれています。