Previous Next JavaScript must be enabled to correctly display this content

## Using TableRequest API

You can use TableRequest API to create an index on a NoSQL table.

The `TableRequest` class is used to create an index on a table. Execution of operations specified by this request is asynchronous. These are potentially long-running operations. `TableResult` is returned from `TableRequest` operations and it encapsulates the state of the table. See Oracle NoSQL Java SDK API Reference for more details on the `TableRequest` class and its methods.

Download the full code Indexes.java from the examples here.

    /**
    * Create an index acct_episodes in the stream_acct table
    */
    private static void crtIndex(NoSQLHandle handle) throws Exception {
       String createIndexDDL = "CREATE INDEX acct_episodes ON " + tableName +
                               "(acct_data.contentStreamed[].seriesInfo[].episodes[]  AS ANYATOMIC)";
       TableRequest treq = new TableRequest().setStatement(createIndexDDL);
       TableResult tres = handle.tableRequest(treq);
       tres.waitForCompletion(handle, 60000, /* wait 60 sec */
              1000); /* delay ms for poll */
       System.out.println("Index acct_episodes on " + tableName + " is created");
    }

The `borneo.TableRequest` class is used to create an index on a table. All calls to `borneo.NoSQLHandle.table_request()` are asynchronous so it is necessary to check the result and call `borneo.TableResult.wait_for_completion()` to wait for the operation to complete. See Oracle NoSQL Python SDK API Reference for more details on `table_request` and its methods.

Download the full code Indexes.py from the examples here.

    #create an index
    def create_index(handle):
       statement = '''CREATE INDEX acct_episodes ON stream_acct (acct_data.contentStreamed[].seriesInfo[].episodes[]  AS ANYATOMIC)'''
       request = TableRequest().set_statement(statement)
       table_result = handle.do_table_request(request, 40000, 3000)
       table_result.wait_for_completion(handle, 40000, 3000)
       print('Index acct_episodes on the table stream_acct is created')

The `TableRequest` class is used to create an index on a table. Execution of operations specified by `TableRequest` is asynchronous. These are potentially long-running operations. This request is used as the input of a `Client.DoTableRequest()` operation, which returns a `TableResult` that can be used to poll until the table reaches the desired state. See Oracle NoSQL Go SDK API Reference for more details on the various methods of the `TableRequest` class.

Download the full code Indexes.go from the examples here.

    //create an index on a table
    func createIndex(client *nosqldb.Client, err error, tableName string)(){
       stmt := fmt.Sprintf("CREATE INDEX acct_episodes ON %s "+
    		"(acct_data.contentStreamed[].seriesInfo[].episodes[]  AS ANYATOMIC)",tableName)
       tableReq := &nosqldb.TableRequest{
    		Statement: stmt,
       }
       tableRes, err := client.DoTableRequest(tableReq)
       if err != nil {
          fmt.Printf("cannot initiate CREATE INDEX request: %v\n", err)
          return
       }
       // The create index request is asynchronous, wait for index creation to complete.
       _, err = tableRes.WaitForCompletion(client, 60*time.Second, time.Second)
       if err != nil {
          fmt.Printf("Error finishing CREATE INDEX request: %v\n", err)
          return
       }
       fmt.Println("Created Index acct_episodes on table ", tableName)
       return
    }

You can create an index on a table using the `tableDDL` method. This method is asynchronous and it returns a Promise of `TableResult`. The `TableResult` is a plain JavaScript object that encapsulates the state of the table. For method details, see NoSQLClient class.

Download the full JavaScript code Indexes.js from the examples here and the full TypeScript code Indexes.ts from the examples here.

    //creates an index
    async function createIndex(handle) {
       const crtindDDL = `CREATE INDEX acct_episodes ON ${TABLE_NAME}(acct_data.contentStreamed[].seriesInfo[].episodes[]  AS ANYATOMIC)`;
       let res =  await handle.tableDDL(crtindDDL);
       console.log('Index acct_episodes is created on table:' + TABLE_NAME);
    }

To create an index on a table use either of the methods `ExecuteTableDDLAsync` or `ExecuteTableDDLWithCompletionAsync`. Both these methods return `Task<TableResult>`. `TableResult` instance contains status of DDL operation such as TableState and table schema. See Oracle NoSQL Dotnet SDK API Reference for more details on these methods.

Download the full code Indexes.cs from the examples here.

    // Creates an index on a table
    private static async Task createIndex(NoSQLClient client){
       var sql =
          $@"CREATE INDEX acct_episodes ON {TableName}(acct_data.contentStreamed[].seriesInfo[].episodes[]  AS ANYATOMIC)";
       var tableResult = await client.ExecuteTableDDLAsync(sql);
       // Wait for the operation completion
       await tableResult.WaitForCompletionAsync();
       Console.WriteLine(" Index acct_episodes is created on table Table {0}",
                    tableResult.TableName);
    }