Queries and implicit cursors

When a DataBlade® API statement-execution function executes a query, the function must create a place to hold the resulting rows. Each of these functions (mi_exec(), mi_exec_prepared_statement(), or mi_open_prepared_statement()) automatically creates a row cursor (often called a cursor). The row cursor is an area of memory that serves as a holding place for rows that the database server has retrieved.

The simplest way to hold the rows of a query is to use an implicit cursor, which is defined with the following characteristics.
Cursor characteristic Restriction
Read-only You can only examine the contents of the row cursor. You cannot modify these contents.
Sequential A sequential cursor allows movement through the rows of the cursor in the forward direction only. You cannot go backward through the cursor. To re-access a row that you have already accessed, you must close the cursor, reopen it, and move to the desired row.
Most DataBlade API modules can use an implicit cursor for accessing rows. However, if the cursor characteristics of the implicit cursor are not adequate for the needs of your DataBlade API module, you can define an explicit cursor with any of the following cursor characteristics.
Cursor characteristic Description
Cursor type In which direction does the cursor enable you to access rows? You can choose a sequential cursor or a scroll cursor.
Cursor mode Which operations are valid on the rows in the cursor? You can choose read-only or update mode.
Cursor lifespan How long does the cursor remain open? You can choose whether to use a hold cursor.
The following table shows how to choose a DataBlade API statement-execution function based on the type of cursor that the query requires.
Can query use implicit cursor? DataBlade API function
Yes mi_exec(), mi_exec_prepared_statement()
No mi_open_prepared_statement()

With the mi_open_prepared_statement() function, you can specify an explicit cursor to hold the query rows. In addition, you can assign a name to the cursor that you can use in other SQL statements.