Home » SQL & PL/SQL » SQL & PL/SQL » Manipulating XML Clob (Oracle 11.2)
Manipulating XML Clob [message #611715] Mon, 07 April 2014 14:39 Go to next message
deepugun
Messages: 6
Registered: January 2014
Junior Member
Hello All,
I am new to PL\SQL programmming. I am actually trying to update an XML value stored as a clob in a table. As this table has 20 + million records , I am trying to use the bulk collect to update the data. I have written some basic code which when i compile is throwing me an error. Please kindly go through the query and let me know if ther eis any thing modified or optimizied. I am also attaching the error

PROCEDURE ASACTIVITY_TAXPAYER_DMMY 

IS 
CURSOR ASACTIVITY_cur 
IS 
 select xmldata, activityguid from XML_DMMY where STATUSCODE in ('01', '02', '09') and  TYPECODE in ('01', '04');

TYPE ASACTIVITY_TWO_COLS is RECORD
(
 XMLDATA XML_DMMY.XMLDATA% TYPE
 ACTIVITYGUID XML_DMMY.ACTIVITYGUID%TYPE
 );
 
TYPE  ASACTIVITY_INFO_XMLDATAGUID is TABLE OF ASACTIVITY_TWO_COLS;

ASACTIVITY_INFO ASACTIVITY_INFO_XMLDATAGUID;

v_TaxpayerClientGUID varchar2(36) := null;
par_attr varchar2(36) := 'TaxpayerClientGUID';
par_app Number := 1;
v_TaxId varchar2(15);
v_TaxpayerTaxID varchar2(40) := 'TaxpayerTaxID';
v_OwnerTaxID varchar2(40) := 'OwnerTaxID';
v_AnnuitantTaxID varchar2(40) := 'AnnuitantTaxID';
retval1 clob := null;

BEGIN 
OPEN ASACTIVITY_cur;
LOOP 
FETCH ASACTIVITY_cur 
BULK COLLECT INTO ASACTIVITY_INFO LIMIT 500; 

FORALL indx IN 1 .. ASACTIVITY_INFO.COUNT 
LOOP 
 retval1 := ASACTIVITY_INFO(indx).XMLDATA;

select substr(retval1, INSTR(retval1, par_attr,1, par_app) + length(par_attr) + 1 , INSTR(SUBSTR(retval1, INSTR(retval1, par_attr,1, par_app) + length(par_attr) + 2 ), '<')) into v_TaxpayerClientGUID from dual;
  
select taxid into v_taxid from asclient where clientguid = v_TaxpayerClientGUID;
 
          if regexp_like(substr(retval1,INSTR(retval1,v_TaxpayerTaxID,1, par_app) + length(v_TaxpayerTaxID) + 1, length(v_taxid)), '[[:digit:]]') then
  
Select Replace( retval1, substr(retval1,INSTR(retval1,v_TaxpayerTaxID,1, par_app) + length(v_TaxpayerTaxID) + 1, length(v_taxid)), v_taxid) into retval1 from dual;
  
          end if;
  
  
         if regexp_like(substr(retval1,INSTR(retval1,v_OwnerTaxID,1, par_app) + length(v_OwnerTaxID) + 1 ,length(v_taxid)),'[[:digit:]]') then
  
Select Replace(retval1, substr(retval1,INSTR(retval1,v_OwnerTaxID,1, par_app) + length(v_OwnerTaxID) + 1 ,length(v_taxid)), v_taxid) into retval1 from dual;
    
        end if;
  
  
        if regexp_like(substr(retval1,INSTR(retval1,v_AnnuitantTaxID,1, par_app) + length(v_AnnuitantTaxID) + 1 ,length(v_taxid)),'[[:digit:]]') then
        Select Replace( retval1, substr(retval1,INSTR(retval1,v_AnnuitantTaxID,1, par_app) + length(v_AnnuitantTaxID) + 1, length(v_taxid)), v_taxid) into retval1 from dual;
                 
       end if;
  
  
  update ASACTIVITY
  set 
   xmldata = retval1 where ACTIVITYGUID =ASACTIVITY_INFO(indx).ACTIVITYGUID ;


END LOOP; 
EXIT WHEN ASACTIVITY_INFO.COUNT < 500; 

END LOOP; 
CLOSE ASACTIVITY_cur; 
COMMIT; 
EXCEPTION 
WHEN OTHERS THEN 
NULL; 

END ASACTIVITY_TAXPAYER_DMMY; 


/forum/fa/11816/0/


[mod-edit: code tags added and image inserted into message body by bb]
  • Attachment: Test.png
    (Size: 24.47KB, Downloaded 805 times)

[Updated on: Fri, 18 July 2014 20:02] by Moderator

Report message to a moderator

Re: Manipulating XML Clob [message #611720 is a reply to message #611715] Mon, 07 April 2014 19:37 Go to previous message
BlackSwan
Messages: 26766
Registered: January 2009
Location: SoCal
Senior Member
I seriously doubt that the run time message resulted from the posted code.
I say this because posted code has compile errors which will 100% prevent it from being run.

Since we don't have your tables or data, we can not compile, run or test posted code.
It would be helpful if you provided DDL (CREATE TABLE ...) for tables involved.
It would be helpful if you provided DML (INSERT INTO ...) for test data.
It would be helpful if you followed Posting Guidelines - http://www.orafaq.com/forum/t/88153/0/311
It would be helpful if you provided expected/desired results & a detailed explanation how & why the test data gets transformed or organized.

>EXCEPTION
>WHEN OTHERS THEN
>NULL;

The 3 lines above should NEVER EVER be considered, included or used in ANY PL/SQL procedure!
Previous Topic: How to write query for desire output?
Next Topic: Oracle 10g : Connect by prior
Goto Forum:
  


Current Time: Fri Apr 26 23:37:58 CDT 2024