You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Oracle Net Descriptors of the form ```(DESCRIPTION=...)``` may be specified as an io.r2dbc.spi.Option having the name `oracleNetDescriptor`.
177
178
- If `oracleNetDescriptor` is specified, then it is invalid to specify any other options that might conflict with information in the descriptor, such as: `HOST`, `PORT`, `DATABASE`, and `SSL`.
178
179
- The `oracleNetDescriptor` option may appear in the query section of an R2DBC URL: `r2dbc:oracle://?oracleNetDescriptor=(DESCRIPTION=...)`
@@ -269,15 +270,6 @@ values for a non-empty set of column names.
269
270
```Result``` for each returned cursor.
270
271
271
272
### Type Mappings
272
-
- Blob and Clob objects are the default mapping implemented by Row.get(...) for
273
-
BLOB and CLOB columns. ByteBuffer and String mappings are not supported for BLOB
274
-
and CLOB.
275
-
- Oracle Database allows BLOBs and CLOBs to store terabytes of data; This
276
-
amount would exceed the capacity of a ByteBuffer or String.
277
-
- Blob and Clob objects stream data over a series of ByteBuffers or Strings.
278
-
- Requiring content to be streamed over multiple buffers is necessary for Oracle
279
-
R2DBC to avoid a potentially memory exhausting implementation in which BLOBs and
280
-
CLOBs must be fully materialized as a return value for Row.get(...).
281
273
- javax.json.JsonObject and oracle.sql.json.OracleJsonObject are supported as
282
274
Java type mappings for JSON column values.
283
275
- java.time.Duration is supported as a Java type mapping for INTERVAL DAY TO SECOND
@@ -288,6 +280,27 @@ column values.
288
280
The Oracle Database type named "DATE" stores the same information as a LocalDateTime:
289
281
year, month, day, hour, minute, and second.
290
282
283
+
### BLOB, CLOB, and NCLOB
284
+
When a SQL query returns a LOB value, a
285
+
portion of that value is prefetched from the database and the remaining portion
286
+
must be fetched with additional database calls. The number of prefetched
287
+
bytes is configured by an ```Option``` named [oracle.jdbc.defaultLobPrefetchSize](https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html?is-external=true#CONNECTION_PROPERTY_DEFAULT_LOB_PREFETCH_SIZE)
288
+
. The default value of this ```Option``` is 1 GB.
289
+
290
+
The ```Row.get(...)``` method allows LOB values to be mapped into materialized
291
+
types like ```ByteBuffer``` and ```String```. If the prefetch size is large
292
+
enough to have fetched the entire LOB value, then ```Row.get(...)``` can
293
+
return a ```ByteBuffer/String``` without any additional database calls.
294
+
Otherwise, if the LOB value is larger than the prefetch size, then
295
+
```Row.get(...)``` must execute a **blocking database call** to fetch the
296
+
remainder of that value.
297
+
298
+
For systems in which LOB values are too large to be prefetched, a smaller
299
+
prefetch size can be configured, and LOB values may be mapped into ```Blob```
300
+
or ```Clob``` objects rather than ```ByteBuffer``` or ```String```. ```Blob```
301
+
and ```Clob``` objects allow the LOB value to be streamed using non-blocking
302
+
database calls.
303
+
291
304
# Secure Programming Guidelines
292
305
The following security guidelines should be followed when programming with the Oracle R2DBC Driver.
0 commit comments