コンテンツにスキップ

16.1.6 ROWID

Machbase 8.7.0以降でサポート

ROWIDはテーブル内の1行を再検索するための64ビット識別子です。このページではSQLでの意味、 テーブル別の参照条件、INSERTの実行結果、有効期間を定義します。SDK別のアクセスAPIとコードは、 SDK機能のサポート範囲と各言語のページを参照してください。

この機能はStandard Editionでサポートします。サーバーとSDKをROWIDに対応するバージョンへ一緒に 更新してください。Cluster Editionでは使用できません。

ROWIDと業務キーの区別

ROWIDは現在のテーブルの保存行の位置を示す識別子であり、注文番号や機器IDなどの永続的な業務キーではありません。

  • 通常の列ではないためSELECT *には含まれません。必要な場合は明示的に選択してください。
  • 他のテーブルのROWIDと比較したり、他のテーブルの参照に使用したりしないでください。
  • ROWID値を分解したり算術演算に使用したりしないでください。
  • 数値の大小はテーブル全体の取り込み順序を意味しません。
  • 新規テーブルにはROWIDという実列を定義できません。
  • 旧バージョンで実際のROWID列を作成したテーブルでは、その列を優先します。ROWID疑似列を使用するには既存列の名前を変更してください。
SELECT ROWID, name, time, value
  FROM sensor_tag
 WHERE name = 'TAG-01';

テーブル別のサポート範囲

テーブルROWIDの意味参照条件単一行INSERTの結果
LOG保存されたログ行の識別子=, <, <=, >, >=, BETWEEN, ORDER BY生成されたROWIDを返す
TAG保存された元のTAG行の識別子最上位のANDに含む単一のROWID = 値生成されたROWIDを返す
TRANSACTION単一のLONG/INT64 PRIMARY KEY値既存PKがサポートする条件PK値をROWIDとして返す
LOOKUP単一のLONG/INT64 PRIMARY KEY値既存PKがサポートする条件PK値をROWIDとして返す
VOLATILE単一のLONG/INT64 PRIMARY KEY値既存PKがサポートする条件PK値をROWIDとして返す

TRANSACTION、LOOKUP、VOLATILEでは、AUTO_INCREMENTの使用に関係なく、値が0以上の単一 LONG/INT64 PRIMARY KEYをROWIDとして使用します。アプリケーションがPK値を指定した場合はその値を、 AUTO_INCREMENT PKを省略またはNULLにした場合はサーバーが生成した値を返します。負数のPKはROWIDとして使用できません。

LOGとTAGのROWIDは0..UINT64_MAX-1、3つのPRIMARY KEYベースのテーブルは0..INT64_MAXの範囲です。 0は有効な値で、UINT64_MAXはROWIDとして使用できません。

LOGの参照

LOGのROWIDは範囲参照とソートに使用できます。_ARRIVAL_TIMEは複数行で同じ値になる場合があるため、 特定行の再検索にはROWIDを使用します。

SELECT ROWID, message
  FROM app_log
 WHERE ROWID >= ?
   AND ROWID < ?
 ORDER BY ROWID;

ROWID IN (...)はサポートしません。

TAGの参照

TAGは単一ROWIDの等値参照のみをサポートします。タグ名、時刻、値の条件をANDで併用でき、 すべての条件を満たす行だけを返します。

SELECT ROWID, name, time, value
  FROM sensor_tag
 WHERE ROWID = ?
   AND name = 'TAG-01'
   AND time >= TO_DATE('2026-08-10 00:00:00', 'YYYY-MM-DD HH24:MI:SS');

TAG ROWIDの条件のサポート可否は次のとおりです。

使用方法サポート
ROWID = ?O
ROWID > ?BETWEENなどの範囲条件X
ROWID IN (...)X
ROWID = ? OR ...X
ORDER BY ROWIDX
DELETE ... WHERE ROWID = ?X
rollup、custom rollup、statの結果との組み合わせX

TRANSACTION、LOOKUP、VOLATILEの比較

次の3つのテーブルは同じAUTO_INCREMENT宣言を使用できますが、再起動時の動作と取り込み機能は異なります。

CREATE TRANSACTION TABLE orders (
    id   LONG PRIMARY KEY AUTO_INCREMENT,
    item VARCHAR(100)
);

CREATE LOOKUP TABLE lookup_orders (
    id   LONG PRIMARY KEY AUTO_INCREMENT,
    item VARCHAR(100)
);

CREATE VOLATILE TABLE volatile_orders (
    id   LONG PRIMARY KEY AUTO_INCREMENT,
    item VARCHAR(100)
);
項目TRANSACTIONLOOKUPVOLATILE
再起動後に行と次の自動値を保持OOX
明示的トランザクションOXX
INSERT ... SELECTで自動値を生成OXX
AUTO_INCREMENTテーブルのUPSERTO (ROWID返却はX)XX
単一行INSERT ... VALUESの結果ROWIDOOO

LOOKUPのPROPERTY(SEQUENCE)NEXTVAL()AUTO_INCREMENTとは別の機能です。 同じ列に両方式を指定しないでください。

明示的トランザクション中はTRANSACTIONテーブルのDDLを実行できません。CREATE TRANSACTION TABLEERR-02362で失敗したら、先にCOMMITまたはROLLBACKしてから再実行します。

JOIN、集約、View

JOIN結果全体を代表するROWIDはありません。必要なソーステーブルの別名ごとにROWIDを参照します。

SELECT a.ROWID AS order_rowid,
       b.ROWID AS item_rowid,
       a.customer, b.item
  FROM orders a JOIN order_items b ON a.id = b.order_id;
参照形式ROWIDの処理
JOIN必要なソーステーブルの別名ごとにalias.ROWIDを指定
集約、GROUP BYDISTINCT、集合演算結果行に新しいROWIDを生成しない
View, CTE, inline view内部SELECTでROWIDを明示的に選択した場合のみ伝播

INSERT結果でROWIDを受け取る条件

INSERT ... RETURNING ROWID構文は使用しません。対応するSDKは、成功した単一行の INSERT ... VALUESの実行結果にROWIDも含めて返します。

取り込み方法generated ROWID説明
単一行の直接INSERT ... VALUESO1行の作成が成功した場合
単一行のプリペアドINSERTO実行ごとに現在の結果を返す
INSERT ... SELECTX複数行を作成する可能性があるため単一値を返さない
execute-array, batch, executemany()X内部の最終行を代表値として公開しない
Append API, append batchX高速取り込み経路では返さない
loaderXファイル取り込み経路では返さない
UPSERTXINSERTまたはUPDATEの結果を単一ROWIDで代表しない
失敗したINSERTX前回の実行のROWIDも消去

生成されたROWIDはステートメントごとの結果です。接続全体の最新値を参照するSQL関数は提供しません。

参照結果とエラーの区別

形式が正しいROWIDが現在のテーブルになければ、エラーではなく0行を返します。削除済みの行や追加条件を 満たさない行も同様です。一方、NULL、負数のPK、UINT64_MAX、数値へ変換できない値、TAGで非対応の 範囲・IN・OR・ソート条件はエラーです。

有効期間と再試行

ROWIDを長期保存する業務キーとして使用しないでください。

状況既存のROWID
正常な再起動保持された行では維持
ROWIDの保持に対応する製品のバックアップ/復元保持された行では維持
行のDELETE無効
transaction ROLLBACK該当INSERTのROWIDは無効
スナップショット復旧で破棄された行無効
LOG TRUNCATE以前の値が再利用される場合がある
テーブルのDROP後の再作成以前の値が別の行を指す場合がある
エクスポート/インポートまたは行の再挿入保持しない

INSERTが成功してもネットワーク応答が失われると、アプリケーションがROWIDを受け取れない場合があります。 同じINSERTを自動再試行すると重複行が生じる可能性があるため、業務キーや別途の冪等性ポリシーで 実際の反映状態を先に確認してください。

関連ドキュメント

最終更新日