Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


Delphi/400 SELECT SQLによる行番号の取得

今回はDelphi/400でSQLを使ってデータ取得を行う際の行番号取得方法をご紹介いたします。


設定方法

Delphi/400では、Query系のコンポーネントを使うことでIBM i にSQLを実行することができます。
例えばTFDQuery(FireDAC)や、TSQLQuery(dbExpress)コンポーネントです。

データを取得する場合にはSELECT句の構文を使用しますが、
その際に下記のような「ROW_NUMBER」関数を使うと
IBM i で行番号を付与してレコードを取得することができます。

SELECT ROW_NUMBER() OVER(PARTITION BY XXXXXXX ORDER BY XXXXXXXX) 取得名 FROM ~~~

 

使用時の注意点

この構文をDelphi/400から使用する場合にはポイントがあります。

Query系のコンポーネントでこの関数をそのまま使用するとエラーになります。
これはSQLの内部的な型をDelphi側で判別ができないためです。

そのため、Delphi/400からSQLでROW_NUMBER関数を使用する場合には、
次のように型を整数にキャストして取得します。

SELECT CAST(ROW_NUMBER() OVER(PARTITION BY XXXXXXX ORDER BY XXXXXXXX) AS INTEGER) 取得名 FROM ~~~

この構文ではINTEGER型として、Delphi/400でも行番号を取得することができます。

この方法を覚えておくと、行番号用のフィールドを作成しなくても
番号を付与してレコードを扱うことができますので、是非ご活用下さい。

 

(ミガロ.情報マガジン「MIGARO News!!」Vol.188 2016年7月号より一部改変)