The direct I/O functions perform input or output directly on the OCI handle, without the intervening layer of a stream. If you move large amounts of data to or from the LOB, and in particular if you pass the data to or from foreign functions, the direct calls can be more efficient, and in some cases also more convenient to use. Note, however, that if you make many small modifications to the data, the
lob-stream
interface may be more efficient.
Note also that the difference in efficiency between the direct calls and the
lob-stream
interface is likely to be quite small compared to the time spent on network traffic.
If you make many modifications to a LOB, you should also consider wrapping the operations in a transaction created by a pair of calls to
ora-lob-open
and
ora-lob-close
.
You can read data from the LOB locator into a Lisp buffer or foreign buffer using
ora-lob-read-buffer
and
ora-lob-read-foreign-buffer
respectively.
Similarly
ora-lob-write-buffer
and
ora-lob-write-foreign-buffer
can be used to write buffer to a LOB.
You can obtain a buffer suitable for efficient I/O with foreign functions via
ora-lob-get-buffer
.
ora-lob-read-into-plain-file
writes the contents of a LOB into a file.
ora-lob-write-from-plain-file
writes the contents of a file into a LOB.