Skip to content
pvmehta.com

pvmehta.com

  • Home
  • About Me
  • Toggle search form
  • Optimizer SORT Operations Oracle
  • move_arch_files.ksh Linux/Unix
  • Renaming Global Name GLOBAL_NAME Oracle
  • get_ratio.sql get the ratio of users from v$session and this uses CASE-WHEN-THEN clause Oracle
  • Find total file sizes Linux/Unix
  • kill all processes from specific user in solaris. Linux/Unix
  • Explain Plan Doesn’T Change For Sql After New Statistics Generated Oracle
  • Find all users who have DML privileges Oracle
  • Oracle Internal Good Websites 1 Oracle
  • import-export with multiple files Oracle
  • Gathering statistics with DBMS_STATS Oracle
  • Remove DOS CR/LFs (^M) Linux/Unix
  • Kill a session dynanically using execute immediate Oracle
  • Oracle 10g for solaris 10 Oracle
  • Locktree.sql Oracle

Handling LOB data in Oracle

Posted on 24-May-2010 By Admin No Comments on Handling LOB data in Oracle

Here is another good example:

You can initialize the LOBs by using the following SQL INSERT statement:

INSERT INTO lob_table VALUES (1001, EMPTY_BLOB(), NULL,

EMPTY_CLOB(), NULL);

External LOBs:

INSERT INTO lob_table VALUES

(21, NULL, NULL, NULL, BFILENAME(‘IMG’, ‘image1.gif’));

INSERT INTO lob_table VALUES

(22, NULL, NULL, NULL, BFILENAME(‘IMG’, ‘image2.gif’));

UPDATE lob_table SET f_lob = BFILENAME(‘IMG’, ‘image3.gif’)

WHERE key_value = 22;

BFILENAME() is a built-in function that is used to initialize the BFILE column to point to the external file.

Selecting a LOB:

DECLARE image1 BLOB; image_no INTEGER := 101;BEGIN

SELECT b_lob INTO image1 FROM lob_table WHERE key_value = image_no;

DBMS_OUTPUT.PUT_LINE(‘Size of the Image is: ‘ ||

DBMS_LOB.GETLENGTH(image1)); — more LOB routinesEND;

Example of a Read Consistent Locator

INSERT INTO lob_table

VALUES (1, NULL, ‘abcd’, NULL, NULL);

COMMIT;

DECLARE

num_var INTEGER;

clob_selected CLOB;

clob_updated CLOB;

clob_copied CLOB;

read_amount INTEGER;

read_offset INTEGER;

write_amount INTEGER;

write_offset INTEGER;

buffer VARCHAR2(20);

BEGIN

— At time t1:

SELECT c_lob INTO clob_selected

FROM lob_table

WHERE key_value = 1;

— At time t2:

SELECT c_lob INTO clob_updated

FROM lob_table

WHERE key_value = 1

FOR UPDATE;

— At time t3:

clob_copied := clob_selected;

— After the assignment, both the clob_copied and the

— clob_selected have the same snapshot as of the point in time

— of the SELECT into clob_selected

— Reading from the clob_selected and the clob_copied will

— return the same LOB value. clob_updated also sees the same

— LOB value as of its select:

read_amount := 10;

read_offset := 1;

dbms_lob.read(clob_selected, read_amount, read_offset,

buffer);

dbms_output.put_line(‘clob_selected value: ‘ || buffer);

— Produces the output ‘abcd’

read_amount := 10;

dbms_lob.read(clob_copied, read_amount, read_offset, buffer);

dbms_output.put_line(‘clob_copied value: ‘ || buffer);

— Produces the output ‘abcd’

read_amount := 10;

dbms_lob.read(clob_updated, read_amount, read_offset, buffer);

dbms_output.put_line(‘clob_updated value: ‘ || buffer);

— Produces the output ‘abcd’

— At time t4:

write_amount := 3;

write_offset := 5;

buffer := ‘efg’;

dbms_lob.write(clob_updated, write_amount, write_offset,

buffer);

read_amount := 10;

dbms_lob.read(clob_updated, read_amount, read_offset, buffer);

dbms_output.put_line(‘clob_updated value: ‘ || buffer);

— Produces the output ‘abcdefg’

— At time t5:

read_amount := 10;

dbms_lob.read(clob_selected, read_amount, read_offset,

buffer);

dbms_output.put_line(‘clob_selected value: ‘ || buffer);

— Produces the output ‘abcd’

— At time t6:

read_amount := 10;

dbms_lob.read(clob_copied, read_amount, read_offset, buffer);

dbms_output.put_line(‘clob_copied value: ‘ || buffer);

— Produces the output ‘abcd’

END;

/

Example of an Updated LOB Locator

INSERT INTO lob_table

VALUES (1, NULL, ‘abcd’, NULL, NULL);

COMMIT;

DECLARE

num_var INTEGER;

clob_updated CLOB;

clob_copied CLOB;

read_amount INTEGER; ;

read_offset INTEGER;

write_amount INTEGER;

write_offset INTEGER;

buffer VARCHAR2(20);

BEGIN

— At time t1:

SELECT c_lob INTO clob_updated FROM lob_table

WHERE key_value = 1

FOR UPDATE;

— At time t2:

clob_copied := clob_updated;

— after the assign, clob_copied and clob_updated see the same

— LOB value

read_amount := 10;

read_offset := 1;

dbms_lob.read(clob_updated, read_amount, read_offset, buffer);

dbms_output.put_line(‘clob_updated value: ‘ || buffer);

— Produces the output ‘abcd’

read_amount := 10;

dbms_lob.read(clob_copied, read_amount, read_offset, buffer);

dbms_output.put_line(‘clob_copied value: ‘ || buffer);

— Produces the output ‘abcd’

— At time t3:

write_amount := 3;

write_offset := 5;

buffer := ‘efg’;

dbms_lob.write(clob_updated, write_amount, write_offset,

buffer);

read_amount := 10;

dbms_lob.read(clob_updated, read_amount, read_offset, buffer);

dbms_output.put_line(‘clob_updated value: ‘ || buffer);

— Produces the output ‘abcdefg’

— At time t4:

read_amount := 10;

dbms_lob.read(clob_copied, read_amount, read_offset, buffer);

dbms_output.put_line(‘clob_copied value: ‘ || buffer);

— Produces the output ‘abcd’

— At time t5:

clob_copied := clob_updated;

read_amount := 10;

dbms_lob.read(clob_copied, read_amount, read_offset, buffer);

dbms_output.put_line(‘clob_copied value: ‘ || buffer);

— Produces the output ‘abcdefg’

END;

/

Copying internal LOBs

INSERT INTO lob_table1 (key_value, b_lob)

(SELECT key_value, b_lob FROM lob_table2 T2

WHERE T2.key_value = 101);

creates a new LOB locator in the table lob_table1, and copies the LOB data from lob_table2 to the location pointed to by a new LOB locator which is inserted into table lob_table1.

———-

LOB Reference

EMPTY_BLOB() and EMPTY_CLOB() Functions

INSERT INTO lob_table VALUES (1001, EMPTY_BLOB(), ‘abcde’, NULL, NULL);

UPDATE lob_table SET c_lob = EMPTY_CLOB() WHERE key_value = 1001;

INSERT INTO lob_table VALUES (1002, NULL, NULL, NULL, NULL);

BFILENAME() Function

DBMS_LOB Package

The DBMS_LOB package provides routines to access BLOBs, CLOBs, NCLOBs, and BFILEs. You can use DBMS_LOB for access and manipulation of specific parts of a LOB, as well as complete LOBs. DBMS_LOB can read as well as modify BLOBs, CLOBs, and NCLOBs, and provides read-only operations on BFILEs.

All DBMS_LOB routines work based on LOB locators. For the successful completion of DBMS_LOB routines, you must provide an input locator that represents a LOB that already exists in the database tablespaces or external filesystem.

The routines that can modify BLOB, CLOB, and NCLOB values are:

APPEND() – append the contents of the source LOB to the destination LOB

COPY() – copy all or part of the source LOB to the destination LOB

ERASE() – erase all or part of a LOB

LOADFROMFILE() – load BFILE data into an internal LOB

TRIM() – trim the LOB value to the specified shorter length

WRITE()- write data to the LOB from a specified offset

The routines that read or examine LOB values are:

GETLENGTH() – get the length of the LOB value

INSTR() – return the matching position of the nth occurrence of the pattern in the LOB

READ() – read data from the LOB starting at the specified offset

SUBSTR() – return part of the LOB value starting at the specified offset

The read-only routines specific to BFILEs are:

FILECLOSE() – close the file

FILECLOSEALL()- close all previously opened files

FILEEXISTS() – check if the file exists on the server

FILEGETNAME() – get the directory alias and file name

FILEISOPEN() – check if the file was opened using the input BFILE

locators

FILEOPEN() – open a file

Oracle, SQL scripts

Post navigation

Previous Post: oracle Dba site
Next Post: Temporary Tablespsace Temp tablespace behaviour

Related Posts

  • Set Role explaination. Oracle
  • create user with unlimited quota Oracle
  • Committing distributed transaction using commit force Oracle
  • Adding Datafile on Primary Server and Impact on Standby Server Oracle
  • load SPM baseline from cursor cache Oracle
  • find_idle_cpu.sql Oracle

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Categories

  • Ansible (0)
  • AWS (2)
  • Azure (1)
  • Linux/Unix (149)
  • MYSQL (5)
  • Oracle (393)
  • PHP/MYSQL/Wordpress (10)
  • POSTGRESQL (0)
  • Power-BI (0)
  • Python/PySpark (7)
  • RAC (17)
  • rman-dataguard (26)
  • shell (149)
  • SQL scripts (342)
  • SQL Server (6)
  • Uncategorized (0)
  • Videos (0)

Recent Posts

  • Trace a SQL session from another session using ORADEBUG30-Sep-2025
  • SQL Server Vs Oracle Architecture difference25-Jul-2025
  • SQL Server: How to see historical transactions25-Jul-2025
  • SQL Server: How to see current transactions or requests25-Jul-2025
  • T-SQL Vs PL/SQL Syntax25-Jul-2025
  • Check SQL Server edition25-Jul-2025
  • Checking SQL Server Version25-Jul-2025
  • Oracle vs MYSQL Architecture differences (For DBAs)24-Jul-2025
  • V$INSTANCE of Oracle in MYSQL24-Jul-2025
  • Day to day MYSQL DBA operations (Compared with Oracle DBA)24-Jul-2025

Archives

  • 2025
  • 2024
  • 2023
  • 2010
  • 2009
  • 2008
  • 2007
  • 2006
  • 2005
  • cif crons Linux/Unix
  • For Perl DBI installation and testing program PHP/MYSQL/Wordpress
  • find checksum of a file. Linux/Unix
  • DBMS_PROFILER for tuning PLSQL programs. Oracle
  • RMAN : Consistent Backup, Restore and Recovery using RMAN Oracle
  • How to check current redo log progress redo_progress.sql Oracle
  • Mutating Table Error while using database trigger Oracle
  • find_err.sql for finding errors from dba_errors. Oracle

Copyright © 2025 pvmehta.com.

Powered by PressBook News WordPress theme