SQLでレコード番号を参照する方法
日付 | 2009/11/06 |
---|---|
ID | 75895 (英語原文参照) |
バージョン | 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に返します。