ストアからの行の削除
TableAPI.delete()
メソッドを使用して、1つの行をストアから削除します。行は、Table.createPrimaryKey()
メソッドを使用して取得されるPrimaryKey
に基づいて削除されます。 削除される前に、行が指定されたバージョンに一致することを求めることもできます。これを行うには、TableAPI.deleteIfVersion()
メソッドを使用します。バージョンについては、「行バージョンの使用」で説明します。
行を削除する場合、ストアへの書込み操作で発生するのと同じ例外に対処する必要があります。これらの例外の概要は、書込みの例外を参照してください。
package kvstore.basicExample;
import oracle.kv.KVStore;
import oracle.kv.table.PrimaryKey;
import oracle.kv.table.Table;
import oracle.kv.table.TableAPI;
...
// KVStore handle creation is omitted for brevity
...
TableAPI tableH = kvstore.getTableAPI();
// The name you give to getTable() must be identical
// to the name that you gave the table when you created
// the table using the CREATE TABLE DDL statement.
Table myTable = tableH.getTable("myTable");
// Get the primary key for the row that we want to delete
PrimaryKey primaryKey = myTable.createPrimaryKey();
primaryKey.put("item", "Bolts");
// Delete the row
// This performs a store write operation
tableH.delete(primaryKey, null, null);
multiDelete()の使用
複数の行ですべてシャード・キー値を共有している場合、1回の原子的操作で一度に複数の行を削除できます。シャード・キーが少なくとも主キーのサブセットではあることを思い出してください。この場合、複数削除を実行するために、シャード・キーである部分主キーが使用されます。
複数の行を一度に削除するには、TableAPI.multiDelete()
メソッドを使用します。
たとえば、次のような表を作成するとします。
CREATE TABLE myTable (
itemType STRING,
itemCategory STRING,
itemClass STRING,
itemColor STRING,
itemSize STRING,
price FLOAT,
inventoryCount INTEGER,
PRIMARY KEY (SHARD(itemType, itemCategory, itemClass), itemColor,
itemSize)
)
次のようなデータを含む表:
-
行1:
-
itemType: Hats
-
itemCategory: baseball
-
itemClass: longbill
-
itemColor: red
-
itemSize: small
-
price: 12.07
-
inventoryCount: 127
-
-
行2:
-
itemType: Hats
-
itemCategory: baseball
-
itemClass: longbill
-
itemColor: red
-
itemSize: medium
-
price: 13.07
-
inventoryCount: 201
-
-
行3:
-
itemType: Hats
-
itemCategory: baseball
-
itemClass: longbill
-
itemColor: red
-
itemSize: large
-
price: 14.07
-
inventoryCount: 39
-
この場合、次のように、部分主キーHats
、baseball
、longbill
を共有するすべての行を削除できます。
package kvstore.basicExample;
import oracle.kv.KVStore;
import oracle.kv.table.PrimaryKey;
import oracle.kv.table.Table;
import oracle.kv.table.TableAPI;
...
// KVStore handle creation is omitted for brevity
...
TableAPI tableH = kvstore.getTableAPI();
// The name you give to getTable() must be identical
// to the name that you gave the table when you created
// it using the CREATE TABLE DDL statement.
Table myTable = tableH.getTable("myTable");
// Get the primary key for the row that we want to delete
PrimaryKey primaryKey = myTable.createPrimaryKey();
primaryKey.put("itemType", "Hats");
primaryKey.put("itemCategory", "baseball");
primaryKey.put("itemClass", "longbill");
// Exception handling omitted
tableH.multiDelete(primaryKey, null, null);