The mi_value() function
The mi_value() function retrieves a column value from a row, given the column identifier.
Syntax
mi_integer mi_value(row, column_id, value_buf, value_len)
MI_ROW *row;
mi_integer column_id;
MI_DATUM *value_buf;
mi_integer *value_len;
- row
- The row from which values are being extracted.
- column_id
- The column identifier of the column, which specifies the position of the column in the specified row. Column numbering follows C programming conventions: the first column in the row is at position zero.
- value_buf
- A pointer to an MI_DATUM structure that contains the column value. This function allocates the MI_DATUM structure. You do not need to supply the buffer to contain the returned value.
- value_len
- The length of the returned column value.
Valid in client LIBMI application? | Valid in user-defined routine? |
---|---|
Yes | Yes |
Usage
The way to interpret the data returned in the value_buf depends on the mi_value() return value, as follows.
- Return value from mi_value()
- Contents of value_buf
- MI_NORMAL_VALUE
- A pointer to an MI_DATUM structure that holds the value
for the column
The format of this value depends on whether the control mode for the retrieved data is text or binary representation. In binary mode, the format also depends on whether the MI_DATUM value is passed by reference or by value.
- MI_ROW_VALUE
- A pointer to a row structure (MI_ROW)
- MI_COLLECTION_VALUE
- A pointer to a collection structure (MI_COLLECTION)
- MI_NULL_VALUE
- A pointer to a value that indicates the SQL NULL value for the column
The pointer returned in value_buf is valid until a new mi_exec() function is run or until the statement is dropped with the mi_drop_prepared_statement() function. However, the DataBlade® API can overwrite the data when the mi_next_row() function is called on the same connection.
- The mi_next_row() function is called on the same connection.
- A call to the mi_row_create() function uses the row descriptor.
- The mi_row_free() function is called on the row.
- The mi_row_desc_free() function is called on the row descriptor.
If you need to save the data for later use, you must create your own copy of the data that value_buf references. For example, if the column is a character column, the data in value_buf is a pointer to an mi_lvarchar structure. To save the data in the mi_lvarchar structure, you can copy it with the mi_var_copy() function. You can use a save set to save an entire row.
For more information about how to retrieve values, see the HCL OneDB™ DataBlade API Programmer's Guide.
Return values
- MI_NORMAL_VALUE
- The retbuf value is not a row type or a collection.
- MI_COLLECTION_VALUE
- The retbuf value is a pointer to a collection structure (MI_COLLECTION).
- MI_ROW_VALUE
- The retbuf value is a pointer to a row structure (MI_ROW).
- MI_NULL_VALUE
- The retbuf value is an SQL NULL value.
- MI_ERROR
- The function was not successful.