Oracle8i Application Developer's Guide - Large Objects (LOBs) Release 2 (8.1.6) Part Number A76940-01 |
|
Internal Persistent LOBs, 36 of 42
See:
"Use Case Model: Internal Persistent LOBs Basic Operations", for all basic operations of Internal Persistent LOBs. |
This procedure describes how to flush the LOB buffer.
Enable buffering when performing a small read or write of data. Once you have completed these tasks, you must disable buffering before you can continue with any other LOB
operations.
For more information, refer to "LOB Buffering Subsystem" in Chapter 5, "Advanced Topics".
See Chapter 3, "LOB Programmatic Environments" for a list of available functions in each programmatic environment. Use the following syntax references for each programmatic environment:
This scenario is part of the management of a buffering example related to Sound
that is developed in this and related methods. The associated examples are provided in the following programmatic environments:
Examples are provided in the following programmatic environments:
IDENTIFICATION DIVISION. PROGRAM-ID. LOB-BUFFERING. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 USERID PIC X(11) VALUES "SAMP/SAMP". 01 BLOB1 SQL-BLOB. 01 BUFFER PIC X(10). 01 AMT PIC S9(9) COMP. EXEC SQL VAR BUFFER IS RAW(10) END-EXEC. EXEC SQL INCLUDE SQLCA END-EXEC. PROCEDURE DIVISION. LOB-BUFFERING. EXEC SQL WHENEVER SQLERROR DO PERFORM SQL-ERROR END-EXEC. EXEC SQL CONNECT :USERID END-EXEC. * Allocate and initialize the BLOB locator: EXEC SQL ALLOCATE :BLOB1 END-EXEC. EXEC SQL WHENEVER NOT FOUND GOTO END-OF-BLOB END-EXEC. EXEC SQL SELECT SOUND INTO :BLOB1 FROM MULTIMEDIA_TAB WHERE CLIP_ID = 1 FOR UPDATE END-EXEC. * Open the BLOB and enable buffering: EXEC SQL LOB OPEN :BLOB1 READ WRITE END-EXEC. EXEC SQL LOB ENABLE BUFFERING :BLOB1 END-EXEC. * Write some data to the BLOB: MOVE "242424" TO BUFFER. MOVE 3 TO AMT. EXEC SQL LOB WRITE :AMT FROM :BUFFER INTO :BLOB1 END-EXEC. MOVE "212121" TO BUFFER. MOVE 3 TO AMT. EXEC SQL LOB WRITE :AMT FROM :BUFFER INTO :BLOB1 END-EXEC. * Now flush the buffered writes: EXEC SQL LOB FLUSH BUFFER :BLOB1 END-EXEC. EXEC SQL LOB DISABLE BUFFERING :BLOB1 END-EXEC. EXEC SQL LOB CLOSE :BLOB1 END-EXEC. END-OF-BLOB. EXEC SQL WHENEVER NOT FOUND CONTINUE END-EXEC. EXEC SQL FREE :BLOB1 END-EXEC. EXEC SQL ROLLBACK WORK RELEASE END-EXEC. STOP RUN. SQL-ERROR. EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC. DISPLAY " ". DISPLAY "ORACLE ERROR DETECTED:". DISPLAY " ". DISPLAY SQLERRMC. EXEC SQL ROLLBACK WORK RELEASE END-EXEC. STOP RUN.
#include <oci.h> #include <stdio.h> #include <string.h> #include <sqlca.h> void Sample_Error() { EXEC SQL WHENEVER SQLERROR CONTINUE; printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK WORK RELEASE; exit(1); } #define BufferLength 256 void flushBufferingLOB_proc() { OCIBlobLocator *Lob_loc; int Amount = BufferLength; int multiple, Position = 1; /* Datatype equivalencing is mandatory for this datatype: */ char Buffer[BufferLength]; EXEC SQL VAR Buffer is RAW(BufferLength); EXEC SQL WHENEVER SQLERROR DO Sample_Error(); /* Allocate and Initialize the LOB: */ EXEC SQL ALLOCATE :Lob_loc; EXEC SQL SELECT Sound INTO :Lob_loc FROM Multimedia_tab WHERE Clip_ID = 1 FOR UPDATE; /* Enable use of the LOB Buffering Subsystem: */ EXEC SQL LOB ENABLE BUFFERING :Lob_loc; memset((void *)Buffer, 0, BufferLength); for (multiple = 0; multiple < 8; multiple++) { /* Write data to the LOB: */ EXEC SQL LOB WRITE ONE :Amount FROM :Buffer INTO :Lob_loc AT :Position; Position += BufferLength; } /* Flush the contents of the buffers and Free their resources: */ EXEC SQL LOB FLUSH BUFFER :Lob_loc FREE; /* Turn off use of the LOB Buffering Subsystem: */ EXEC SQL LOB DISABLE BUFFERING :Lob_loc; /* Release resources held by the Locator: */ EXEC SQL FREE :Lob_loc; } void main() { char *samp = "samp/samp"; EXEC SQL CONNECT :samp; flushBufferingLOB_proc(); EXEC SQL ROLLBACK WORK RELEASE; }
|
![]() Copyright © 1996-2000, Oracle Corporation. All Rights Reserved. |
|