DBMGetOffset

Description
테이블 내에서, 또는 Category 내에서 특정 인덱스 상에서의 주어진 레코드의 offset을 구한다.

Syntax
DBMErr DBMGetOffset(TableId tableId, CatId catId, IndexFlag indexFlag, RecId recId, RecOrder recOrder, int* offset);

Parameters
tableId 테이블의 ID
catId Category ID
특정 Category을 지정하지 않을 때는 NULL_CAT_ID를 사용한다.
indexFlag레코드의 순서를 결정하기 위해 사용하는 인덱스
recId 레코드의 id
recOrder레코드의 정렬 순서
(DBM_INCR 또는 DBM_DECR)
offset레코드의 offset 반환

Returns
value설명
DBM_OK성공적으로 수행된 경우
DBM_TOO_MANY_SCANS이미 open된 스캔의 수가 NUM_SCANS인 경우
DBM_INVALID_TABLE_ID 주어진 테이블 id를 갖는 테이블이 존재하지 않는 경우
DBM_INVALID_CAT_ID catId!=NULL_CAT_ID이면서 주어진 Category id를 갖는 Category가 존재하지 않는 경우
또는 주어진 레코드가 해당 Category에 속하지 않는 경우
DBM_INVALID_FLAGindexFlag!=DBM_PRIM&&indexFlag!=DBM_SEC인 경우
DBM_SECONDARY_INDEX_NOT_EXISTindexFlag==DBM_SEC이면서 테이블에 secondary index가 존재하지 않는 경우
DBM_INVALID_REC_ID테이블에 주어진 레코드 id가 존재하지 않거나, virtual delete된 레코드인 경우
DBM_DB_NOT_INITED 데이타베이스가 초기화되어 있지 않은 경우

Comments
테이블에 많은 수의 레코드가 존재할 때, 임의 레코드에 대한 빠른 접근을 위해 DBMGetOffset, DBMOpenSeqScanTableWithCursor / DBMOpenSeqScanCategoryWithCursor를 사용할 수 있다.

See Also
DBMOpenSeqScanTableWithCursor, DBMOpenSeqScanCategoryWithCursor

Example
  TableId tableId; ScanId scanId; RecId recId; DBMErr ret=DBM_OK;
  int numResults, offset;
  // Get tableId and recId
  ret = DBMGetOffset( tableId, NULL_CAT_ID, DBM_PRIM, DBM_INCR, &offset);
  if( ret < DBM_OK ) // error handling
  ...
  ret = DBMOpenSeqScanTableWithCursor(tableId, DBM_PRIM, recId, DBM_INCR, &scanId);
  if( ret < DBM_OK ) // error handling
  ...