Home » SQL & PL/SQL » SQL & PL/SQL » Manipulating XML Clob (Oracle 11.2)
Manipulating XML Clob [message #611715] |
Mon, 07 April 2014 14:39 |
|
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;
[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 |
|
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!
|
|
|
Goto Forum:
Current Time: Fri Apr 26 23:37:58 CDT 2024
|