Higgins S., Kotsovolos S., Raphaely D.
Table of contents :
Send Us Your Comments……Page 21
Preface……Page 23
Structure……Page 24
Related Documents……Page 27
Conventions……Page 29
Documentation Accessibility……Page 32
LOB Features Introduced with Oracle9i, Release 1 (9.0.1)……Page 33
LOB Features Introduced with Oracle8i, Release 8.1.5……Page 36
1 Introduction to LOBs……Page 37
Unstructured Data in System Files Need Accessing from the Database……Page 38
Oracle Text (interMedia Text) Indexing Supports Searching Content in XML Elements……Page 39
Why Not Use LONGs?……Page 40
SQL Semantics Support for LOBs……Page 41
Extensible Indexing on LOBs……Page 42
Extensible Optimizer……Page 43
LOB “Demo” Directory……Page 44
Compatibility and Migration Issues……Page 45
Examples in This Manual Use the Multimedia Schema……Page 46
2 Basic LOB Components……Page 47
External LOBs (BFILEs)……Page 48
Reference Semantics……Page 49
CLOB, NCLOB Values are Stored Using 2 Byte Unicode for Varying-Width Character Sets……Page 50
Converting Between Client Character Set and UCS-2……Page 51
Internal LOBs……Page 52
External LOBs……Page 53
SELECTing a LOB……Page 54
Setting an Internal LOB to NULL……Page 55
Initializing LOBs Example Using Table Multimedia_tab……Page 56
Initializing External LOBs to NULL or a File Name……Page 57
3 LOB Support in Different Programmatic Environments……Page 59
Eight Programmatic Environments Operate on LOBs……Page 60
Comparing the LOB Interfaces……Page 61
Pro*C/C++ Statements that Operate on BLOBs, CLOBs, NCLOBs, and BFILEs……Page 65
Pro*C/C++ Embedded SQL Statements To Read or Examine Internal and External LOB Values……Page 66
Pro*C/C++ Embedded SQL Statements To Open and Close Internal LOBs and External LOBs (BFILEs)……Page 68
OLEDB (Oracle Provider for OLEDB — OraOLEDB)……Page 69
4 Managing LOBs……Page 71
Using SQL DML for Basic Operations on LOBs……Page 72
Oracle8 Release 8.0.4.3……Page 73
Managing Temporary LOBs……Page 74
Inline versus Out-of-Line LOBs……Page 75
SQL Loader Performance: Loading Into Internal LOBs……Page 76
Data File (sample.dat)……Page 77
Control File……Page 78
Loading Out-Of-Line LOB Data……Page 79
Secondary Data File (SecondStory.txt)……Page 80
Loading Out-of-Line LOB Data in Delimited Fields……Page 81
Control File……Page 82
SQL Loader LOB Loading Tips……Page 83
LOB Restrictions……Page 84
Removed Restrictions……Page 87
5 Large Objects: Advanced Topics……Page 89
A Selected Locator Becomes a Read Consistent Locator……Page 90
Read Consistent Locators Provide Same LOB Value Regardless of When the SELECT Occurs……Page 91
Example……Page 92
Example of Updating a LOB Using SQL DML and DBMS_LOB……Page 94
Example……Page 95
Example of Using One Locator to Update the Same LOB Value……Page 96
Example……Page 97
Example of Updating a LOB with a PL/SQL (DBMS_LOB) Bind Variable……Page 98
Example……Page 99
LOB Locators Cannot Span Transactions……Page 101
Example of Locator Not Spanning a Transaction……Page 102
Transaction IDs: Reading and Writing to a LOB Using Locators……Page 103
Case 2:……Page 104
Case 4:……Page 105
LOBs in the Object Cache……Page 106
Guidelines for Using LOB Buffering……Page 107
LOB Buffer Physical Structure……Page 109
Example of Using the LOB Buffering System (LBS)……Page 110
Flushing the LOB Buffer……Page 111
Flushing the Updated LOB……Page 112
Saving Locator State to Avoid a Reselect……Page 113
OCI Example of LOB Buffering……Page 114
Creating a Varray Containing LOB References: Example……Page 117
Example of LOB Columns in Partitioned Index-Organized Tables……Page 118
Non-Supported Column Types……Page 119
Hash Partitioned Index-Organized Table LOB Restrictions……Page 120
6 Frequently Asked Questions about LOBs……Page 121
Answer……Page 124
Question……Page 125
Answer……Page 126
Answer……Page 127
Answer……Page 128
Answer……Page 129
Answer……Page 130
Answer……Page 131
Question……Page 132
Answer……Page 133
Answer……Page 134
Answer……Page 135
Answer……Page 138
Question……Page 139
Answer……Page 140
Question……Page 141
Answer……Page 142
Question……Page 143
Answer……Page 144
Answer……Page 145
Question 1……Page 146
Answer 2……Page 147
Answer……Page 148
Answer……Page 149
Question……Page 150
Answer……Page 151
Answer……Page 152
7 Modeling and Design……Page 153
LOBs Compared to LONG and LONG RAW Types……Page 154
Selecting a Table Architecture……Page 155
EMPTY_CLOB() or EMPTY_BLOB() Column Storage: LOB Locator is Stored……Page 156
Defining Tablespace and Storage Example1……Page 157
TABLESPACE and LOB Index……Page 158
PCTVERSION……Page 159
CACHE / NOCACHE / CACHE READS……Page 160
LOBs Will Always Generate Undo for LOB Index Pages……Page 161
Set INITIAL and NEXT to Larger than CHUNK……Page 162
Guidelines for ENABLE or DISABLE STORAGE IN ROW……Page 163
Example 1: Creating a Tablespace and Table to Store Gigabyte LOBs……Page 164
How this Affects the Temporary LOB COPY or APPEND?……Page 165
Binds Greater than 4,000 Bytes are Now Allowed For LOB INSERTs and UPDATEs……Page 166
Binds of More Than 4,000 Bytes … No HEX to RAW or RAW to HEX Conversion……Page 167
Example: PL/SQL – Using Binds of More Than 4,000 Bytes in INSERT and UPDATE……Page 168
Example: PL/SQL – 4,000 Byte Result Limit in Binds of More than 4,000 Bytes When Data Includes SQ………Page 170
Example: C (OCI) – Binds of More than 4,000 Bytes For INSERT and UPDATE……Page 171
Close All Opened LOBs Before Committing the Transaction……Page 174
Example 1: Correct Use of OPEN/CLOSE Calls to LOBs in a Transaction……Page 175
LOBs in Index Organized Tables (IOT)……Page 176
Example of Index Organized Table (IOT) with LOB Columns……Page 177
Manipulating LOBs in Partitioned Tables……Page 178
Creating and Partitioning a Table Containing LOB Data……Page 180
Creating an Index on a Table Containing LOB Columns……Page 182
Splitting Partitions Containing LOBs……Page 183
Functional Indexes on LOB Columns……Page 184
Improved LOB Usability: You can Now Access LOBs Using SQL “Character” Functions……Page 185
PL/SQL Relational Operators Now Allowed for LOBs……Page 186
Using SQL Functions and Operators for VARCHAR2s on CLOBs……Page 187
UNICODE Support for VARCHAR2 and CLOB……Page 191
Defining CHAR Buffer on CLOB……Page 192
Returning VARCHAR2s……Page 193
Returned LOB is a Temporary LOB Locator……Page 194
IS [NOT] NULL in VARCHAR2s and CLOBs……Page 195
SQL DML Changes For LOBs……Page 196
PL/SQL Statements and Variables: New Semantics Changes……Page 197
PL/SQL Example 1: Prior Release SQL Interface for a CLOB/VARCHAR2 Application……Page 198
PL/SQL Example 3: Defining a CLOB Variable on a VARCHAR2……Page 199
VARCHAR2 and CLOB in PL/SQL Built-in Functions……Page 200
PL/SQL Example 5: Change in Locator-Data Linkage……Page 201
PL/SQL Example 6: Freeing Temporary LOBs Automatically and Manually……Page 202
Varying-Width Character Sets: VARCHAR2s and CLOBs……Page 203
Inserting More than 4K Bytes Data Into LOB Columns……Page 204
Performance Measurement……Page 205
User-Defined Aggregates and LOBs……Page 206
UDAGs: DML and Query Support……Page 207
8 Migrating From LONGs to LOBs……Page 209
Using the LONG-to-LOB API Results in an Easy Migration……Page 210
Binds in OCI……Page 211
OCI Functions Allow Piecewise and Array INSERT, UPDATE, or Fetch on LOBs……Page 212
Assignment and Parameters Passing (PL/SQL)……Page 213
Migrating LONGs to LOBs: Using ALTER TABLE to Change LONG Column to LOB Types……Page 214
All Constraints of LONG Column are Maintained……Page 216
Rebuilding Indexes After a LONG to LOB Migration……Page 217
Replication……Page 218
Triggers……Page 219
NULL LOBs Versus Zero Length LOBs……Page 220
Guidelines for Using LONG-to-LOB API for LOBs with OCI……Page 221
Using Piecewise INSERTs and UPDATEs with Polling……Page 222
Simple Fetch in One Piece……Page 223
Piecewise with Callback……Page 224
UPDATEs……Page 225
Variable Assignment Between CLOB/CHAR and BLOB/RAW……Page 226
VARCHAR2 and CLOB in PL/SQL Built-In Functions……Page 227
PL/SQL and C Binds from OCI……Page 228
From SQL……Page 229
From PL/SQL……Page 230
Overloading with Anchored Types……Page 231
Using utldtree.sql to Determine Where Your Application Needs Change……Page 232
To Convert LONG to CLOB, Use ALTER TABLE……Page 233
Converting LONG to LOB Example 1: More than 4K Binds and Simple INSERTs……Page 234
Converting LONG to LOB Example 2: Piecewise INSERT with Polling……Page 235
Converting LONG to LOB Example 3: Piecewise INSERT with Callback……Page 236
Converting LONG to LOB Example 4: Array insert……Page 238
Converting LONG to LOB Example 6: Piecewise Fetch with Polling……Page 240
Converting LONG to LOB Example 7: Piecewise Fetch with Callback……Page 241
Converting LONG to LOB Example 8: Array Fetch……Page 243
Converting LONG to LOB Example 9: Using PL/SQL in INSERT, UPDATE and SELECT……Page 244
Converting LONG to LOB Example 10: Assignments and Parameter Passing in PL/SQL……Page 245
Converting LONG to LOB Example 12: Using PL/SQL Binds from OCI on LOBs……Page 246
Calling PL/SQL Outbinds in the “call foo(:1);” Manner……Page 247
Converting LONG to LOB Example 13: Calling PL/SQL and C Procedures from PL/SQL……Page 248
PL/SQL Interface……Page 249
Compatibility and Migration……Page 250
Answer……Page 251
Answer……Page 252
Answer……Page 253
9 LOBS: Best Practices……Page 255
Loading XML Documents Into LOBs With SQL*Loader……Page 256
LOB Performance Guidelines……Page 259
Temporary LOB Performance Guidelines……Page 260
The Correct Procedure……Page 263
Preventing Generation of Redo Space During Migration……Page 264
10 Internal Persistent LOBs……Page 265
Use Case Model: Internal Persistent LOBs Operations……Page 266
Creating Tables Containing LOBs……Page 271
Creating a Table Containing One or More LOB Columns……Page 273
SQL: Create a Table Containing One or More LOB Columns……Page 275
Creating a Table Containing an Object Type with a LOB Attribute……Page 278
SQL: Creating a Table Containing an Object Type with a LOB Attribute……Page 280
Creating a Nested Table Containing a LOB……Page 283
SQL: Creating a Nested Table Containing a LOB……Page 285
Inserting One or More LOB Values into a Row……Page 286
Inserting a LOB Value using EMPTY_CLOB() or EMPTY_BLOB()……Page 288
SQL: Inserting a Value Using EMPTY_CLOB() / EMPTY_BLOB()……Page 290
Inserting a Row by Selecting a LOB From Another Table……Page 291
SQL: Inserting a Row by Selecting a LOB from Another Table……Page 292
Inserting a Row by Initializing a LOB Locator Bind Variable……Page 293
C/C++ (ProC/C++): Inserting a Row by Initializing a LOB Locator Bind Variable……Page 294
Loading Initial Data into a BLOB, CLOB, or NCLOB……Page 296
Loading a LOB with BFILE Data……Page 298
C/C++ (ProC/C++): Loading a LOB with Data from a BFILE……Page 300
Open: Checking If a LOB Is Open……Page 302
C/C++ (ProC/C++): Checking if a LOB is Open……Page 303
LONGs to LOBs……Page 305
LONG to LOB Migration Using the LONG-to-LOB API……Page 306
To Convert LONG to CLOB, Use ALTER TABLE……Page 307
LONG to LOB Copying, Using the TO_LOB Operator……Page 308
SQL: Copying LONGs to LOBs Using TO_LOB Operator……Page 309
Checking Out a LOB……Page 312
C/C++ (ProC/C++): Checking Out a LOB……Page 313
Checking In a LOB……Page 316
C/C++ (ProC/C++): Checking in a LOB……Page 317
Displaying LOB Data……Page 321
C/C++ (ProC/C++): Displaying LOB Data……Page 322
Reading Data from a LOB……Page 325
C/C++ (Pro*C/C++): Reading Data from a LOB……Page 327
Reading a Portion of the LOB (substr)……Page 329
C/C++ (Pro*C/C++):Reading a Portion of the LOB (substr)……Page 330
}Comparing All or Part of Two LOBs……Page 332
C/C++ (Pro*C/C++): Comparing All or Part of Two LOBs……Page 333
Patterns: Checking for Patterns in the LOB (instr)……Page 335
C/C++ (Pro*C/C++): Checking for Patterns in the LOB (instr)……Page 336
Length: Determining the Length of a LOB……Page 338
C/C++ (Pro*C/C++): Determining the Length of a LOB……Page 340
Copying All or Part of One LOB to Another LOB……Page 342
C/C++ (Pro*C/C++): Copy All or Part of a LOB to Another LOB……Page 343
Copying a LOB Locator……Page 345
C/C++ (Pro*C/C++): Copying a LOB Locator……Page 346
Equality: Checking If One LOB Locator Is Equal to Another……Page 348
C/C++ (Pro*C/C++): Checking If One LOB Locator Is Equal to Another……Page 349
Initialized Locator: Checking If a LOB Locator Is Initialized……Page 351
C/C++ (Pro*C/C++): Checking If a LOB Locator Is Initialized……Page 352
Character Set ID: Determining Character Set ID……Page 354
Character Set Form: Determining Character Set Form……Page 356
Appending One LOB to Another……Page 358
C/C++ (Pro*C/C++): Appending One LOB to Another……Page 359
Append-Writing to the End of a LOB……Page 362
C/C++ (Pro*C/C++): Writing to the End of (Appending to) a LOB……Page 364
Writing Data to a LOB……Page 366
C/C++ (Pro*C/C++): Writing Data to a LOB……Page 369
Trimming LOB Data……Page 372
C/C++ (Pro*C/C++): Trimming LOB Data……Page 373
Erasing Part of a LOB……Page 377
C/C++ (Pro*C/C++): Erasing Part of a LOB……Page 378
Enabling LOB Buffering……Page 380
C/C++ (Pro*C/C++): Enabling LOB Buffering……Page 382
Flushing the Buffer……Page 384
C/C++ (Pro*C/C++): Flushing the Buffer……Page 386
Disabling LOB Buffering……Page 388
C/C++ (Pro*C/C++): Disabling LOB Buffering……Page 390
Three Ways to Update a LOB or Entire LOB Data……Page 392
Updating a LOB with EMPTY_CLOB() or EMPTY_BLOB()……Page 393
For Binds of More Than 4,000 Bytes……Page 394
SQL: UPDATE a LOB with EMPTY_CLOB() or EMPTY_BLOB()……Page 395
Updating a Row by Selecting a LOB From Another Table……Page 396
SQL: Update a Row by Selecting a LOB From Another Table……Page 397
Updating by Initializing a LOB Locator Bind Variable……Page 398
C/C++ (Pro*C/C++): Updating by Initializing a LOB Locator Bind Variable……Page 399
Deleting the Row of a Table Containing a LOB……Page 401
SQL: Delete a LOB……Page 402
11 Temporary LOBs……Page 403
Use Case Model: Internal Temporary LOBs……Page 404
Temporary LOB Locators Can be IN Values……Page 408
Temporary LOB Data is Stored in Temporary Tablespace……Page 409
Temporary Tablespace……Page 410
Locators and Semantics……Page 411
Features Specific to Temporary LOBs……Page 412
Security Issues with Temporary LOBs……Page 413
Managing Temporary LOBs……Page 414
Creating a Temporary LOB……Page 415
C/C++ (Pro*C/C++): Creating a Temporary LOB……Page 416
Checking If a LOB is Temporary……Page 418
C/C++ (Pro*C/C++): Checking If a LOB is Temporary……Page 419
Freeing a Temporary LOB……Page 421
C/C++ (Pro*C/C++): Freeing a Temporary LOB……Page 422
Loading a Temporary LOB with Data from a BFILE……Page 424
C/C++ (Pro*C/C++): Loading a Temporary LOB with Data from a BFILE……Page 425
Determining If a Temporary LOB Is Open……Page 427
C/C++ (Pro*C/C++): Determining if a Temporary LOB is Open……Page 428
Displaying Temporary LOB Data……Page 430
C/C++ (Pro*C/C++): Displaying Temporary LOB Data……Page 431
Reading Data from a Temporary LOB……Page 434
C/C++ (Pro*C/C++): Reading Data from a Temporary LOB……Page 436
Reading Portion of Temporary LOB (Substr)……Page 438
C/C++ (Pro*C/C++): Reading a Portion of Temporary LOB (substr)……Page 439
Comparing All or Part of Two (Temporary) LOBs……Page 442
C/C++ (Pro*C/C++): Comparing All or Part of Two (Temporary) LOBs……Page 443
Determining If a Pattern Exists in a Temporary LOB (instr)……Page 446
C/C++ (Pro*C/C++): Determining If a Pattern Exists in a Temporary LOB (instr)……Page 447
Finding the Length of a Temporary LOB……Page 450
C/C++ (Pro*C/C++): Finding the Length of a Temporary LOB……Page 451
Copying All or Part of One (Temporary) LOB to Another……Page 453
C/C++ (Pro*C/C++): Copying All or Part of One (Temporary) LOB to Another……Page 455
Copying a LOB Locator for a Temporary LOB……Page 457
C/C++ (Pro*C/C++): Copying a LOB Locator for a Temporary LOB……Page 458
Is One Temporary LOB Locator Equal to Another……Page 461
C/C++ (Pro*C/C++): Is One LOB Locator for a Temporary LOB Equal to Another……Page 462
Determining if a LOB Locator for a Temporary LOB Is Initialized……Page 465
C/C++ (Pro*C/C++): Determining If a LOB Locator for a Temporary LOB Is Initialized……Page 466
Finding Character Set ID of a Temporary LOB……Page 468
Finding Character Set Form of a Temporary LOB……Page 470
Appending One (Temporary) LOB to Another……Page 472
C/C++ (Pro*C/C++): Appending One (Temporary) LOB to Another……Page 473
Write-Appending to a Temporary LOB……Page 476
C/C++ (Pro*C/C++): Write-Appending to a Temporary LOB……Page 477
Writing Data to a Temporary LOB……Page 480
C/C++ (Pro*C/C++): Writing Data to a Temporary LOB……Page 482
Trimming Temporary LOB Data……Page 485
C/C++ (Pro*C/C++): Trimming Temporary LOB Data……Page 486
Erasing Part of a Temporary LOB……Page 489
C/C++ (Pro*C/C++): Erasing Part of a Temporary LOB……Page 490
Enabling LOB Buffering for a Temporary LOB……Page 492
C/C++ (Pro*C/C++): Enabling LOB Buffering for a Temporary LOB……Page 495
Flushing Buffer for a Temporary LOB……Page 497
C/C++ (Pro*C/C++): Flushing Buffer for a Temporary LOB……Page 498
Disabling LOB Buffering for a Temporary LOB……Page 500
C/C++ (Pro*C/C++): Disabling LOB Buffering for a Temporary LOB……Page 501
12 External LOBs (BFILEs)……Page 505
Use Case Model: External LOBs (BFILEs)……Page 506
Initializing a BFILE Locator……Page 509
Examples……Page 510
BFILENAME() and Initialization……Page 511
Ownership and Privileges……Page 512
SQL DDL for BFILE Security……Page 513
Guidelines for DIRECTORY Usage……Page 514
BFILEs in Shared Server (Multi-Threaded Server — MTS) Mode……Page 515
Guidelines……Page 516
General Rule……Page 517
Three Ways to Create a Table Containing a BFILE……Page 518
Creating a Table Containing One or More BFILE Columns……Page 519
SQL: Creating a Table Containing One or More BFILE Columns……Page 520
Creating a Table of an Object Type with a BFILE Attribute……Page 522
SQL: Creating a Table of an Object Type with a BFILE Attribute……Page 523
Creating a Table with a Nested Table Containing a BFILE……Page 525
SQL: Creating a Table with a Nested Table Containing a BFILE……Page 526
Three Ways to Insert a Row Containing a BFILE……Page 527
INSERT a Row Using BFILENAME()……Page 528
Ways BFILENAME() is Used to Initialize BFILE Column or Locator Variable……Page 529
SQL: Inserting a Row by means of BFILENAME()……Page 530
C/C++ (Pro*C/C++): Inserting a Row by means of BFILENAME()……Page 531
INSERT a BFILE Row by Selecting a BFILE From Another Table……Page 533
SQL: Inserting a Row Containing a BFILE by Selecting a BFILE From Another Table……Page 534
Inserting a Row With BFILE by Initializing a BFILE Locator……Page 535
C/C++ (Pro*C/C++): Inserting a Row Containing a BFILE by Initializing a BFILE Locator……Page 536
Loading Data Into External LOB (BFILE)……Page 538
Data file (sample9.dat)……Page 540
Data file (sample10.dat)……Page 541
Loading a LOB with BFILE Data……Page 542
Specify Amount Parameter to be Less than the Size of the BFILE!……Page 543
C/C++ (Pro*C/C++): Loading a LOB with BFILE Data……Page 544
Two Ways to Open a BFILE……Page 546
Close Files After Use!……Page 547
Opening a BFILE with FILEOPEN……Page 548
Opening a BFILE with OPEN……Page 550
C/C++ (Pro*C/C++): Opening a BFILE with OPEN……Page 551
Specify the Maximum Number of Open BFILEs: SESSION_MAX_OPEN_FILES……Page 553
Checking If the BFILE is Open with FILEISOPEN……Page 555
Checking If a BFILE is Open Using ISOPEN……Page 557
C/C++ (Pro*C/C++): Checking If the BFILE is Open with ISOPEN……Page 558
Displaying BFILE Data……Page 560
C/C++ (Pro*C/C++): Displaying BFILE Data……Page 561
Reading Data from a BFILE……Page 563
The Amount Parameter……Page 564
C/C++ (Pro*C/C++): Reading Data from a BFILE……Page 565
Reading a Portion of BFILE Data (substr)……Page 567
C/C++ (Pro*C/C++): Reading a Portion of BFILE Data (substr)……Page 568
Comparing All or Parts of Two BFILES……Page 570
C/C++ (Pro*C/C++): Comparing All or Parts of Two BFILES……Page 571
Checking If a Pattern Exists (instr) in the BFILE……Page 574
C/C++ (Pro*C/C++): Checking If a Pattern Exists (instr) in the BFILE……Page 575
Checking If the BFILE Exists……Page 578
C/C++ (Pro*C/C++): Checking If the BFILE Exists……Page 579
Getting the Length of a BFILE……Page 581
C/C++ (Pro*C/C++): Getting the Length of a BFILE……Page 582
Copying a LOB Locator for a BFILE……Page 584
C/C++ (Pro*C/C++): Copying a LOB Locator for a BFILE……Page 585
Determining If a LOB Locator for a BFILE Is Initialized……Page 587
C/C++ (Pro*C/C++): Determining If a LOB Locator for a BFILE Is Initialized……Page 588
Determining If One LOB Locator for a BFILE Is Equal to Another……Page 590
C/C++ (Pro*C/C++): Determining If One LOB Locator for a BFILE Is Equal to Another……Page 591
Getting DIRECTORY Alias and Filename……Page 593
C/C++ (Pro*C/C++): Getting Directory Alias and Filename……Page 594
Three Ways to Update a Row Containing a BFILE……Page 596
Updating a BFILE Using BFILENAME()……Page 597
SQL: Updating a BFILE by means of BFILENAME()……Page 599
Updating a BFILE by Selecting a BFILE From Another Table……Page 600
SQL: Updating a BFILE by Selecting a BFILE From Another Table……Page 601
Updating a BFILE by Initializing a BFILE Locator……Page 602
C/C++ (Pro*C/C++): Updating a BFILE by Initializing a BFILE Locator……Page 603
Two Ways to Close a BFILE……Page 605
Closing a BFILE with FILECLOSE……Page 607
Closing a BFILE with CLOSE……Page 609
C/C++ (Pro*C/C++): Closing a BFile with CLOSE……Page 610
Closing All Open BFILEs with FILECLOSEALL……Page 612
C/C++ (Pro*C/C++): Closing All Open BFiles……Page 613
Deleting the Row of a Table Containing a BFILE……Page 615
TRUNCATE……Page 616
13 Using OraOLEDB to Manipulate LOBs……Page 617
Rowset Object……Page 618
Writing Data to a LOB Column With AppendChunk()……Page 619
ADO and LOBs Example 1: Inserting LOB Data From a File……Page 620
14 LOBs Case Studies……Page 623
Building a Multimedia Repository……Page 624
How this Application Uses LOBs……Page 625
Populating the Repository……Page 626
Example 1: Inserting a Word document into a BLOB Column using PL/SQL……Page 627
How the Index Was Built on Table sam_emp, resume Column……Page 628
MyServletCtx.java……Page 629
Retrieving Data from the Repository……Page 631
MyServlet.java……Page 632
First Steps Solution……Page 634
Use Case Diagrams……Page 637
Hot Links in the Online Versions of this Document……Page 643
B The Multimedia Schema Used for Examples in This Manual……Page 645
A Typical Multimedia Application……Page 646
The Multimedia Schema……Page 647
Table Multimedia_Tab……Page 648
Script for Creating the Multimedia Schema……Page 650
Index……Page 655
Reviews
There are no reviews yet.