Author: admin

  • Oracle – reading CLOB’s over database links

    [adsense id=”0514458240″ width=”468″ height=”60″]

    Reading CLOB’s within a cursor over databases links will return “ORA-22992: cannot use LOB locators selected from remote tables”. An example of this might be the following (assuming the field “content” is of datatype CLOB):

    BEGIN
      FOR i IN (SELECT * FROM table_with_clob_fields@dblink) LOOP
        UPDATE table_with_clob_fields -- local copy           
           SET content = i.content,
               other_fields = i.other_fields
         WHERE primary_key = i.primary_key;
      END LOOP;
    END;
    /
    ORA-22992: cannot use LOB locators selected from remote tables
    ORA-06512: at line 2
    22992. 00000 -  "cannot use LOB locators selected from remote tables"
    *Cause:    A remote LOB column cannot be referenced.
    *Action:   Remove references to LOBs in remote tables.
    
    

    CLOB’s cannot be read over database links unless it is the only piece of information being read. So by re-writing this to

    BEGIN
      FOR i IN (SELECT primary_key, other_fields FROM table_with_clob_fields@dblink) LOOP
        UPDATE table_with_clob_fields -- local copy
           SET content = (SELECT content FROM FROM table_with_clob_fields@dblink WHERE primary_key = i.primary_key),
               other_fields = i.other_fields
         WHERE primary_key = i.primary_key;
      END LOOP;
    END;
    /
    

    This will work as it is reading the CLOB content as a single item across the database link.