Library Version 12.1.3.0

Deleting Rows from the Store
Prev | Chapter 6. Writing and Deleting Records | Next

## Deleting Rows from the Store

You delete a single row from the store using the `TableAPI.delete()` method. Rows are deleted based on a `PrimaryKey`, which you obtain using the `Table.createPrimaryKey()` method. You can also require a row to match a specified version before it will be deleted. To do this, use the `TableAPI.deleteIfVersion()` method. Versions are described in Using Row Versions.

When you delete a row, you must handle the same exceptions as occur when you perform any write operation on the store. See Write Exceptions for a high-level description of these exceptions.

    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 CLI's 'table create' command.
    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);

### Using multiDelete()

You can delete multiple rows at once in a single atomic operation, so long as they all share the shard key values. Recall that shard keys are at least a subset of your primary keys. The result is that you use a partial primary key (which happens to be a shard key) to perform a multi-delete.

To delete multiple rows at once, use the `TableAPI.multiDelete()` method.

For example, suppose you created a table like this:

    ## Enter into table creation mode
    table create -name myTable
    ## Now add the fields
    add-field -type STRING -name itemType
    add-field -type STRING -name itemCategory
    add-field -type STRING -name itemClass
    add-field -type STRING -name itemColor
    add-field -type STRING -name itemSize
    add-field -type FLOAT -name price
    add-field -type INTEGER -name inventoryCount
    primary-key -field itemType -field itemCategory -field itemClass
    -field itemColor -field itemSize
    shard-key -field itemType -field itemCategory -field itemClass
    ## Exit table creation mode
    exit

With tables containing data like this:

- Row 1:

  itemType: Hats
  itemCategory: baseball
  itemClass: longbill
  itemColor: red
  itemSize: small
  price: 12.07
  inventoryCount: 127

- Row 2:

  itemType: Hats
  itemCategory: baseball
  itemClass: longbill
  itemColor: red
  itemSize: medium
  price: 13.07
  inventoryCount: 201

- Row 3:

  itemType: Hats
  itemCategory: baseball
  itemClass: longbill
  itemColor: red
  itemSize: large
  price: 14.07
  inventoryCount: 39

Then in this case, you can delete all the rows sharing the partial primary key `Hats`, `baseball`, `longbill` as follows:

    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 CLI's 'table create' command.
    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);

Prev | Up | Next
Writing Rows to a Table in the Store | Home | Chapter 7. Reading Table Rows