Tips

SQLでレコード番号を参照する方法

日付2009/11/06
ID75895 (英語原文参照)
バージョン11.4
プラットフォームMac & Win

レコード番号は、レコードの物理的で絶対的なIDです。レコード番号は、新規レコードが作成されると自動的に割り当てられ、レコードが削除されるまで変わりません。レコード番号は、0から始まります。削除されたレコードのレコード番号は再利用されるため、レコード番号は一意ではありません。レコード番号は、データベースを圧縮あるいは修復した場合も変動することがあります。

SQLで直接、この情報を取得する方法はありませんが、次の方法で参照することができます。

1. はじめに、SQLからコールできるメソッドを作成します。この例では"num_rec"というメソッド名を使用していますが、SQLの規約に準拠していれば、どのようなメソッド名でも構いません。

` start num_rec method
C_LONGINT($0;$1;$2;$3)
C_POINTER($Table;$Field)
$Table:=Table($1)
$Field:=Field($1;$2)
QUERY($Table->;$Field->=$3)
If (Records in selection($Table->)=1)
$0:=Record number($Table->)
End if 
` end of num_rec method

2. 作成したメソッドは、「SQL利用可」プロパティを有効にしておく必要があります。

3.SQLからコールできるメソッドがあれば、次のようなSQLを実行することができます。

` start of sample query method
ARRAY LONGINT(tmpArray;0)
$numTable:=Table(->[Partners])
$numField:=Field(->[Partners]ID)
Begin SQL
   SELECT {fn Num_Rec(:$numTable,:$numField,ID) as NUMERIC} AS RecNum
   FROM PARTNERS
   WHERE Partnership_ID=1
   INTO :tmpArray
End SQL
` end of sample query

上記のコードでは、SQLを実行する準備として、SQLの中で参照する変数をいくつか宣言しています。具体的には、$numTable および $numField を定義しています。

SQLコードブロックの中では、SELECTが"{fn }"キーワードによりNum_Recメソッドをコールしています。メソッドには、引数としてテーブル番号、フィールド番号、および1件のレコードをクエリするための一意の値、この例では、IDフィールドが一意のものなので、引数として渡されています。

Num_Recメソッドは、渡された情報に基づき、適切なテーブルをクエリし、該当するレコード番号をSQLに返します。