Commit 8fdb2e7e authored by Mateusz Łoskot's avatar Mateusz Łoskot Committed by GitHub

Merge pull request #566 from mloskot/ml/mkdocs

Update structure of SOCI 4.0.0 documentation
parents 9c819190 80941a9d
This diff is collapsed.
This diff is collapsed.
## DB2 Backend Reference
* [Prerequisites](#prerequisites)
* [Supported Versions](#versions)
* [Tested Platforms](#platforms)
* [Required Client Libraries](#required)
* [Connecting to the Database](#connecting)
* [SOCI Feature Support](#features)
* [Dynamic Binding](#dynamic)
* [Binding by Name](#name)
* [Bulk Operations](#bulk)
* [Transactions](#transactions)
* [BLOB Data Type](#blob)
* [RowID Data Type](#rowid)
* [Nested Statements](#nested)
* [Stored Procedures](#stored)
* [Accessing the Native Database API](#native)
* [Backend-specific Extensions](#extensions)
* [Configuration options](#config)
### <a name="prerequisites"></a> Prerequisites
#### <a name="versions"></a> Supported Versions
The SOCI DB2 backend.
#### <a name="platforms"></a> Tested Platforms
# DB2 Backend Reference
SOCI backend for accessing IBM DB2 database.
## Prerequisites
### Supported Versions
See [Tested Platforms](#tested-platforms).
### Tested Platforms
<table>
<tbody>
......@@ -37,11 +22,11 @@ The SOCI DB2 backend.
</tbody>
</table>
#### <a name="required"></a> Required Client Libraries
### Required Client Libraries
The SOCI DB2 backend requires IBM DB2 Call Level Interface (CLI) library.
#### <a name="connecting"></a> Connecting to the Database
## Connecting to the Database
On Unix, before using the DB2 backend please make sure, that you have sourced DB2 profile into your environment:
......@@ -51,41 +36,41 @@ To establish a connection to the DB2 database, create a session object using the
soci::session sql(soci::db2, "your DB2 connection string here");
### <a name="features"></a> SOCI Feature Support
## SOCI Feature Support
#### <a name="dynamic"></a> Dynamic Binding
### Dynamic Binding
TODO
#### <a name="bulk"></a> Bulk Operations
### Bulk Operations
Supported, but with caution as it hasn't been extensively tested.
#### <a name="transactions"></a> Transactions
### Transactions
Currently, not supported.
#### <a name="blob"></a> BLOB Data Type
### BLOB Data Type
Currently, not supported.
#### <a name="nested"></a> Nested Statements
### Nested Statements
Nesting statements are not processed by SOCI in any special way and they work as implemented by the DB2 database.
#### <a name="stored"></a> Stored Procedures
### Stored Procedures
Stored procedures are supported, with <code>CALL</code> statement.
### <a name="native"></a> Acessing the native database API
## Native API Access
TODO
*TODO*
### <a name="backend"></a> Backend-specific extensions
## Backend-specific extensions
None.
### <a name="configuration"></a> Configuration options
## Configuration options
This backend supports `db2_option_driver_complete` option which can be passed to
it via `connection_parameters` class. The value of this option is passed to
......@@ -95,9 +80,8 @@ option is `SQL_DRIVER_PROMPT` meaning that the driver will query the user for
the user name and/or the password if they are not stored together with the
connection. If this is undesirable for some reason, you can use `SQL_DRIVER_NOPROMPT` value for this option to suppress showing the message box:
connection_parameters parameters("db2", "DSN=sample");
parameters.set_option(db2_option_driver_complete, "0" /* SQL_DRIVER_NOPROMPT */);
session sql(parameters);
connection_parameters parameters("db2", "DSN=sample");
parameters.set_option(db2_option_driver_complete, "0" /* SQL_DRIVER_NOPROMPT */);
session sql(parameters);
Note, `db2_option_driver_complete` controls driver completion specific to the
IBM DB2 driver for ODBC and CLI.
Note, `db2_option_driver_complete` controls driver completion specific to the IBM DB2 driver for ODBC and CLI.
## Firebird Backend Reference
* [Prerequisites](#prerequisites)
* [Supported Versions](#versions)
* [Tested Platforms](#platforms)
* [Required Client Libraries](#required)
* [Connecting to the Database](#connecting)
* [SOCI Feature Support](#features)
* [Dynamic Binding](#dynamic)
* [Binding by Name](#name)
* [Bulk Operations](#bulk)
* [Transactions](#transactions)
* [BLOB Data Type](#blob)
* [RowID Data Type](#rowid)
* [Nested Statements](#nested)
* [Stored Procedures](#stored)
* [Accessing the Native Database API](#native)
* [Backend-specific Extensions](#extensions)
* [Configuration options](#configuration)
* [FirebirdSOCIError](#firebirdsocierror)
### <a name="prerequisites"></a> Prerequisites
#### <a name="versions"></a> Supported Versions
The SOCI Firebird backend supports versions of Firebird from 1.5 to 2.5 and can be used with either the client-server or embedded Firebird libraries. The former is the default, to select the latter set <tt>SOCI_FIREBIRD_EMBEDDED</tt> CMake option to <tt>ON</tt> value when building.
#### <a name="tested"></a> Tested Platforms
# Firebird Backend Reference
SOCI backend for accessing Firebird database.
## Prerequisites
### Supported Versions
The SOCI Firebird backend supports versions of Firebird from 1.5 to 2.5 and can be used with either the client-server or embedded Firebird libraries.
The former is the default, to select the latter set <tt>SOCI_FIREBIRD_EMBEDDED</tt> CMake option to <tt>ON</tt> value when building.
### Tested Platforms
<table>
<tbody>
......@@ -37,11 +21,11 @@ The SOCI Firebird backend supports versions of Firebird from 1.5 to 2.5 and can
</tbody>
</table>
#### <a name="required"></a> Required Client Libraries
### Required Client Libraries
The Firebird backend requires Firebird's `libfbclient` client library.
### <a name="connecting"></a> Connecting to the Database
## Connecting to the Database
To establish a connection to a Firebird database, create a Session object using the firebird backend factory together with a connection string:
......@@ -72,9 +56,9 @@ Once you have created a `Session` object as shown above, you can use it to acces
(See the [SOCI basics](../basics.html) and [exchanging data](../exchange.html) documentation for general information on using the `Session` class.)
### <a name="features"></a> SOCI Feature Support
## SOCI Feature Support
#### <a name="dynamic"></a> Dynamic Binding
### Dynamic Binding
The Firebird backend supports the use of the SOCI `Row` class, which facilitates retrieval of data whose type is not known at compile time.
......@@ -126,7 +110,7 @@ currently not supported.
(See the [dynamic resultset binding](../exchange.html#dynamic) documentation for general information on using the `Row` class.)
#### <a name="binding"></a> Binding by Name
### Binding by Name
In addition to [binding by position](../exchange.html#bind_position), the Firebird backend supports [binding by name](../exchange.html#bind_name), via an overload of the `use()` function:
......@@ -135,34 +119,33 @@ In addition to [binding by position](../exchange.html#bind_position), the Firebi
It should be noted that parameter binding by name is supported only by means of emulation, since the underlying API used by the backend doesn't provide this feature.
#### <a name="bulk"></a> Bulk Operations
### Bulk Operations
The Firebird backend has full support for SOCI's [bulk operations](../statements.html#bulk) interface. This feature is also supported by emulation.
#### <a name="transactions"></a> Transactions
### Transactions
[Transactions](../statements.html#transactions) are also fully supported by the Firebird backend. In fact, an implicit transaction is always started when using this backend if one hadn't been started by explicitly calling <tt>begin()</tt> before. The current transaction is automatically committed in `Session's` destructor.
#### <a name="blob"></a> BLOB Data Type
### BLOB Data Type
The Firebird backend supports working with data stored in columns of type Blob, via SOCI's `[BLOB](../exchange.html#blob)` class.
It should by noted, that entire Blob data is fetched from database to allow random read and write access. This is because Firebird itself allows only writing to a new Blob or reading from existing one - modifications of existing Blob means creating a new one. Firebird backend hides those details from user.
#### <a name="rowid"></a> RowID Data Type
### RowID Data Type
This feature is not supported by Firebird backend.
#### <a name="nested"></a> Nested Statements
### Nested Statements
This feature is not supported by Firebird backend.
#### <a name="stored"></a> Stored Procedures
### Stored Procedures
Firebird stored procedures can be executed by using SOCI's [Procedure](../statements.html#procedures) class.
### <a name="native"></a> Acessing the native database API
## Native API Access
SOCI provides access to underlying datbabase APIs via several getBackEnd() functions, as described in the [beyond SOCI](../beyond.html) documentation.
......@@ -193,8 +176,8 @@ The Firebird backend provides the following concrete classes for navite API acce
</tbody>
</table>
### <a name="extensions"></a> Backend-specific extensions
## Backend-specific extensions
#### <a name="firebirdsocierror"></a> FirebirdSOCIError
### FirebirdSOCIError
The Firebird backend can throw instances of class `FirebirdSOCIError`, which is publicly derived from `SOCIError` and has an additional public `status_` member containing the Firebird status vector.
\ No newline at end of file
## Existing backends and supported platforms
# Supported Backends and Features
### Supported Features
(Follow the links to learn more about each backend.)
Follow the links to learn more about each backend and detailed supported features.
<table>
<tbody>
<tr>
<th></th>
<th><a href="oracle.html">Oracle</a></th>
<th><a href="postgresql.html">PostgreSQL</a></th>
<th><a href="mysql.html">MySQL</a></th>
<th><a href="sqlite3.html">SQLite3</a></th>
<th><a href="firebird.html">Firebird</a></th>
<th><a href="odbc.html">ODBC</a></th>
<th><a href="db2.html">DB2</a></th>
<th><a href="oracle">Oracle</a></th>
<th><a href="postgresql">PostgreSQL</a></th>
<th><a href="mysql">MySQL</a></th>
<th><a href="sqlite3">SQLite3</a></th>
<th><a href="firebird">Firebird</a></th>
<th><a href="odbc">ODBC</a></th>
<th><a href="db2">DB2</a></th>
</tr>
<tr>
<td>Binding by Name</td>
<td>YES</td>
<td><a href="postgresql.html#bindingbyname">YES (>=8.0)</a></td>
<td><a href="mysql.html#bindingbyname">YES</a></td>
<td>YES (>=8.0)</td>
<td>YES</td>
<td>YES</td>
<td>YES</td>
<td><a href="firebird.html#bindingbyname">YES</a></td>
<td>YES</td>
<td>YES</td>
</tr>
<tr>
<td>Dynamic Binding</td>
<td><a href="oracle.html#dynamic">YES</a></td>
<td><a href="postgresql.html#dynamic">YES</a></td>
<td><a href="mysql.html#dynamic">YES</a></td>
<td>YES</td>
<td>YES</td>
<td>YES</td>
<td>YES</td>
<td>YES</td>
<td>YES</td>
......@@ -42,7 +40,7 @@
<td>YES</td>
<td>YES</td>
<td>YES</td>
<td><a href="firebird.html#bulk">YES</a></td>
<td>YES</td>
<td>YES</td>
<td>YES</td>
</tr>
......@@ -50,20 +48,19 @@
<td>Transactions</td>
<td>YES</td>
<td>YES</td>
<td><a href="mysql.html#transactions">YES</a>
(with servers that support them, usually >=&nbsp;4.0)</td>
<td>YES (>=4.0)</td>
<td>YES</td>
<td>YES</td>
<td><a href="firebird.html#transactions">YES</a></td>
<td>YES</td>
<td>YES</td>
</tr>
<tr>
<td>BLOB Data Type</td>
<td>YES</td>
<td><a href="postgresql.html#blob">YES</a></td>
<td>MySQL's BLOB type is mapped to <code>std::string</code></td>
<td>YES</td>
<td><a href="firebird.html#blob">YES</a></td>
<td>YES (mapped to `std::string`)</td>
<td>YES</td>
<td>YES</td>
<td>NO</td>
<td>NO</td>
</tr>
......@@ -91,7 +88,7 @@
<td>Stored Procedures</td>
<td>YES</td>
<td>YES</td>
<td><a href="mysql.html#procedures">NO (but stored functions, YES)</a></td>
<td>NO (but stored functions, YES)</td>
<td>NO</td>
<td>YES</td>
<td>NO</td>
......
## MySQL Backend Reference
# MySQL Backend Reference
* [Prerequisites](#prerequisites)
* [Supported Versions](#versions)
* [Tested Platforms](#tested)
* [Required Client Libraries](#required)
* [Connecting to the Database](#connecting)
* [SOCI Feature Support](#support)
* [Dynamic Binding](#dynamic)
* [Binding by Name](#name)
* [Bulk Operations](#bulk)
* [Transactions](#transactions)
* [BLOB Data Type](#blob)
* [RowID Data Type](#rowid)
* [Nested Statements](#nested)
* [Stored Procedures](#stored)
* [Accessing the Native Database API](#native)
* [Backend-specific Extensions](#extensions)
* [Configuration options](#configuration)
SOCI backend for accessing MySQL database.
## Prerequisites
### <a name="prerequisites"></a> Prerequisites
#### <a name="versions"></a> Supported Versions
### Supported Versions
The SOCI MySQL backend should in principle work with every version of MySQL 5.x. Some of the features (transactions, stored functions) are not available when MySQL server doesn't support them.
#### <a name="tested"></a> Tested Platforms
### Tested Platforms
<table>
<tbody>
......@@ -39,7 +21,7 @@ The SOCI MySQL backend should in principle work with every version of MySQL 5.x.
</tbody>
</table>
#### <a name="required"></a> Required Client Libraries
### Required Client Libraries
The SOCI MySQL backend requires MySQL's `libmysqlclient` client library.
......@@ -47,7 +29,7 @@ Note that the SOCI library itself depends also on `libdl`, so the minimum set of
-lsoci_core -lsoci_mysql -ldl -lmysqlclient
### <a name="connecting"></a> Connecting to the Database
## Connecting to the Database
To establish a connection to a MySQL server, create a `session` object using the `mysql` backend factory together with a connection string:
......@@ -80,10 +62,9 @@ Once you have created a `session` object as shown above, you can use it to acces
(See the [SOCI basics]("../basics.html) and [exchanging data](../exchange.html) documentation for general information on using the `session` class.)
## SOCI Feature Support
### <a name="support"></a> SOCI Feature Support
#### <a name="dynamic"></a> Dynamic Binding
### Dynamic Binding
The MySQL backend supports the use of the SOCI `row` class, which facilitates retrieval of data which type is not known at compile time.
......@@ -139,7 +120,7 @@ For the MySQL backend, this type mapping is:
(See the [dynamic resultset binding](../exchange.html#dynamic) documentation for general information on using the `Row` class.)
#### <a name="name"></a> Binding by Name
### Binding by Name
In addition to [binding by position](../exchange.html#bind_position), the MySQL backend supports
[binding by name](../exchange.html#bind_name), via an overload of the `use()` function:
......@@ -149,30 +130,29 @@ In addition to [binding by position](../exchange.html#bind_position), the MySQL
It should be noted that parameter binding of any kind is supported only by means of emulation, since the underlying API used by the backend doesn't provide this feature.
#### <a name="bulk"></a> Bulk Operations
### Bulk Operations
[Transactions](../statements.html#transactions) are also supported by the MySQL backend. Please note, however, that transactions can only be used when the MySQL server supports them (it depends on options used during the compilation of the server; typically, but not always, servers >=4.0 support transactions and earlier versions do not) and only with appropriate table types.
#### <a name="blob"></a> BLOB Data Type
### BLOB Data Type
SOCI `blob` interface is not supported by the MySQL backend.
Note that this does not mean you cannot use MySQL's `BLOB` types. They can be selected using the usual SQL syntax and read into `std::string` on the C++ side, so no special interface is required.
#### <a name="rowid"></a> RowID Data Type
### RowID Data Type
The `rowid` functionality is not supported by the MySQL backend.
#### <a name="nested"></a> Nested Statements
### Nested Statements
Nested statements are not supported by the MySQL backend.
#### <a name="stored"></a> Stored Procedures
### Stored Procedures
MySQL version 5.0 and later supports two kinds of stored routines: stored procedures and stored functions (for details, please consult the [procedure MySQL documentation](http://dev.mysql.com/doc/refman/5.0/en/stored-procedures.html)). Stored functions can be executed by using SOCI's [procedure class](../statements.html#procedures). There is currently no support for stored procedures.
### <a name="native"></a> Accessing the native database API
## Native API Access
SOCI provides access to underlying datbabase APIs via several `get_backend()` functions, as described in the [Beyond SOCI](../beyond.html) documentation.
......@@ -195,10 +175,10 @@ The MySQL backend provides the following concrete classes for native API access:
</tbody>
</table>
### <a name="extensions"></a> Backend-specific extensions
## Backend-specific extensions
None.
### <a name="configuration"></a> Configuration options
## Configuration options
None.
\ No newline at end of file
None.
## ODBC Backend Reference
* [Prerequisites](#prerequisites)
* [Supported Versions](#versions)
* [Tested Platforms](#tested)
* [Required Client Libraries](#required)
* [Connecting to the Database](#connecting)
* [SOCI Feature Support](#support)
* [Dynamic Binding](#dynamic)
* [Binding by Name](#name)
* [Bulk Operations](#bulk)
* [Transactions](#transactions)
* [BLOB Data Type](#blob)
* [RowID Data Type](#rowid)
* [Nested Statements](#nested)
* [Stored Procedures](#stored)
* [Accessing the Native Database API](#native)
* [Backend-specific Extensions](#extensions)
* [odbc_soci_error](#odbcsocierror)
* [Configuration options](#configuration)
### <a name="prerequisites"></a> Prerequisites
#### <a name="versions"></a> Supported Versions
# ODBC Backend Reference
SOCI backend for accessing variety of databases via ODBC API.
## Prerequisites
### Supported Versions
The SOCI ODBC backend is supported for use with ODBC 3.
#### <a name="tested"></a> Tested Platforms
### Tested Platforms
<table>
<tbody>
......@@ -41,11 +23,11 @@ The SOCI ODBC backend is supported for use with ODBC 3.
</tbody>
</table>
#### <a name="required"></a> Required Client Libraries
### Required Client Libraries
The SOCI ODBC backend requires the ODBC client library.
### <a name="connecting"></a> Connecting to the Database
## Connecting to the Database
To establish a connection to the ODBC database, create a Session object using the `ODBC` backend factory together with a connection string:
......@@ -65,9 +47,9 @@ Once you have created a `session` object as shown above, you can use it to acces
(See the [SOCI basics](../basics.html) and [exchanging data](../exchange.html) documentation for general information on using the `session` class.)
### <a name="support"></a> SOCI Feature Support
## SOCI Feature Support
#### <a name="dynamic"></a> Dynamic Binding
### Dynamic Binding
The ODBC backend supports the use of the SOCI `row` class, which facilitates retrieval of data whose type is not known at compile time.
......@@ -119,7 +101,7 @@ Not all ODBC drivers support all datatypes.
(See the [dynamic resultset binding](../exchange.html#dynamic) documentation for general information on using the `row` class.)
#### <a name="name"></a> Binding by Name
### Binding by Name
In addition to [binding by position](../exchange.html#bind_position), the ODBC backend supports [binding by name](../exchange.html#bind_name), via an overload of the `use()` function:
......@@ -132,7 +114,7 @@ Apart from the portable "colon-name" syntax above, which is achieved by rewritin
int j = 8;
sql << "insert into t(x, y) values(?, ?)", use(i), use(j);
#### <a name="bulk"></a> Bulk Operations
### Bulk Operations
The ODBC backend has support for SOCI's [bulk operations](../statements.html#bulk) interface. Not all ODBC drivers support bulk operations, the following is a list of some tested backends:
......@@ -166,27 +148,27 @@ The ODBC backend has support for SOCI's [bulk operations](../statements.html#bul
</tbody>
</table>
#### <a name="transactions"></a> Transactions
### Transactions
[Transactions](../statements.html#transactions) are also fully supported by the ODBC backend, provided that they are supported by the underlying database.
#### BLOB Data Type
### BLOB Data Type
Not currently supported.
#### RowID Data Type
### RowID Data Type
Not currently supported.
#### Nested Statements
### Nested Statements
Not currently supported.
#### Stored Procedures
### Stored Procedures
Not currently supported.
### <a name="native"></a> Acessing the native database API
## Native API Access
SOCI provides access to underlying datbabase APIs via several getBackEnd() functions, as described in the [beyond SOCI](../beyond.html) documentation.
......@@ -213,9 +195,9 @@ The ODBC backend provides the following concrete classes for navite API access:
</tbody>
</table>
### <a name="extensions"></a> Backend-specific extensions
## Backend-specific extensions
#### <a name="odbcsocierror"></a> odbc_soci_error
### odbc_soci_error
The ODBC backend can throw instances of class `odbc_soci_error`, which is publicly derived from `soci_error` and has additional public members containing the ODBC error code, the Native database error code, and the message returned from ODBC:
......@@ -238,15 +220,15 @@ The ODBC backend can throw instances of class `odbc_soci_error`, which is public
}
}
#### <a name="getconenctionstring"></a> get_connection_string()
### get_connection_string()
The `odbc_session_backend` class provides `std::string get_connection_string() const` method
that returns fully expanded connection string as returned by the `SQLDriverConnect` function.
### <a name="configuration"></a> Configuration options
## Configuration options
This backend supports `odbc_option_driver_complete` option which can be passed to it via `connection_parameters` class. The value of this option is passed to `SQLDriverConnect()` function as "driver completion" parameter and so must be one of `SQL_DRIVER_XXX` values, in the string form. The default value of this option is `SQL_DRIVER_PROMPT` meaning that the driver will query the user for the user name and/or the password if they are not stored together with the connection. If this is undesirable for some reason, you can use `SQL_DRIVER_NOPROMPT` value for this option to suppress showing the message box:
connection_parameters parameters("odbc", "DSN=mydb");
parameters.set_option(odbc_option_driver_complete, "0" /* SQL_DRIVER_NOPROMPT */);
session sql(parameters);
\ No newline at end of file
session sql(parameters);
## Oracle Backend Reference
* [Prerequisites](#prerequisites)
* [Supported Versions](#versions)
* [Tested Platforms](#tested)
* [Required Client Libraries](#required)
* [Connecting to the Database](#connecting)
* [SOCI Feature Support](#support)
* [Dynamic Binding](#dynamic)
* [Binding by Name](#name)
* [Bulk Operations](#bulk)
* [Transactions](#transactions)
* [BLOB Data Type](#blob)
* [RowID Data Type](#rowid)
* [Nested Statements](#nested)
* [Stored Procedures](#stored)
* [Accessing the Native Database API](#native)
* [Backend-specific Extensions](#extensions)
* [oracle_soci_error](#oraclesocierror)
### <a name="prerequisites"></a> Prerequisites
#### <a name="versions"></a> Supported Versions
# Oracle Backend Reference
SOCI backend for accessing Oracle database.
## Prerequisites
### Supported Versions
The SOCI Oracle backend is currently supported for use with Oracle 10 or later.
Older versions of Oracle may work as well, but they have not been tested by the SOCI team.
#### <a name="tested"></a> Tested Platforms
### Tested Platforms
<table>
<tbody>
......@@ -35,8 +18,7 @@ Older versions of Oracle may work as well, but they have not been tested by the
</tbody>
</table>
#### <a name="required"></a> Required Client Libraries
### Required Client Libraries
The SOCI Oracle backend requires Oracle's `libclntsh` client library. Depending on the particular system, the `libnnz10` library might be needed as well.
......@@ -44,7 +26,7 @@ Note that the SOCI library itself depends also on `libdl`, so the minimum set of
-lsoci_core -lsoci_oracle -ldl -lclntsh -lnnz10
#### <a name="connecting"></a> Connecting to the Database
### Connecting to the Database
To establish a connection to an Oracle database, create a `session` object using the oracle backend factory together with a connection string:
......@@ -76,9 +58,9 @@ Once you have created a `session` object as shown above, you can use it to acces
(See the [SOCI basics](../basics.html) and [exchanging data](../exchange.html) documentation for general information on using the `session` class.)#
### <a name="features"></a> SOCI Feature Support
## SOCI Feature Support
#### <a name="dynamic"></a> Dynamic Binding
### Dynamic Binding
The Oracle backend supports the use of the SOCI `row` class, which facilitates retrieval of data which type is not known at compile time.
......@@ -122,7 +104,7 @@ When calling `row::get<T>()`, the type you should pass as `T` depends upon the n
(See the [dynamic resultset binding](../exchange.html#dynamic) documentation for general information on using the `row` class.)
#### <a name="name"></a> Binding by Name
### Binding by Name
In addition to [binding by position](../exchange.html#bind_position), the Oracle backend supports [binding by name](../exchange.html#bind_name), via an overload of the `use()` function:
......@@ -131,24 +113,24 @@ In addition to [binding by position](../exchange.html#bind_position), the Oracle
SOCI's use of ':' to indicate a value to be bound within a SQL string is consistant with the underlying Oracle client library syntax.
#### <a name="bulk"></a> Bulk Operations
### Bulk Operations
The Oracle backend has full support for SOCI's [bulk operations](../statements.html#bulk) interface.
#### <a name="transactions"></a> Transactions
### Transactions
[Transactions](../statements.html#transactions) are also fully supported by the Oracle backend,
although transactions with non-default isolation levels have to be managed by explicit SQL statements.
#### <a name="blob"></a> blob Data Type
### blob Data Type
The Oracle backend supports working with data stored in columns of type Blob, via SOCI's [blob](../exchange.html#blob) class.
#### <a name="rowid"></a> rowid Data Type
### rowid Data Type
Oracle rowid's are accessible via SOCI's [rowid](../reference.html#rowid) class.
#### <a name="nested"></a> Nested Statements
### Nested Statements
The Oracle backend supports selecting into objects of type `statement`, so that you may work with nested sql statements and PL/SQL cursors:
......@@ -166,11 +148,11 @@ The Oracle backend supports selecting into objects of type `statement`, so that
std::cout << name << '\n';
}
#### <a name="stored"></a> Stored Procedures
### Stored Procedures
Oracle stored procedures can be executed by using SOCI's [procedure](../statements.html#procedures) class.
### <a name="native"></a> Acessing the native database API
## Native API Access
SOCI provides access to underlying datbabase APIs via several `get_backend()` functions, as described in the [Beyond SOCI](../beyond.html) documentation.
......@@ -201,9 +183,9 @@ The Oracle backend provides the following concrete classes for navite API access
</tbody>
</table>
### <a name="extensions"></a> Backend-specific extensions
## Backend-specific extensions
#### <a name="oraclesocierror"></a> oracle_soci_error
### oracle_soci_error
The Oracle backend can throw instances of class `oracle_soci_error`, which is publicly derived from `soci_error` and has an additional public `err_num_` member containing the Oracle error code:
......
## PostgreSQL Backend Reference
* [Prerequisites](#prerequisites)