Load data from XML or Excel file to oracle database with proper validation script

create table HR_temp (col1 varchar2(20), col2 varchar2(20), col3 varchar2(20), col4 varchar2(20), col5 varchar2(20), col6 varchar2(20), col7 varchar2(20),col8 varchar2(20),col9 varchar2(20),col10 varchar2(20),col11 varchar2(20),col12 varchar2(20),col13 varchar2(20),col14 varchar2(20));
/

create table HR_temp_ERROR (ERROR varchar2(20), Status varchar2(20), col1 varchar2(20), col2 varchar2(20), col3 varchar2(20), col4 varchar2(20), col5 varchar2(20), col6 varchar2(20), col7 varchar2(20),col8 varchar2(20),col9 varchar2(20),col10 varchar2(20),col11 varchar2(20),col12 varchar2(20),col13 varchar2(20),col14 varchar2(20));

/



create or replace procedure proc_parseXml_new(pSessionId varchar2, pTransType varchar2, pOperation varchar2, pRawXMLdata clob)  is
   v_parser        Dbms_Xmlparser.Parser;
   v_Xml_Clob      Clob;
   v_Doc           Dbms_Xmldom.Domdocument;

   v_Child_Node    dbms_xmldom.domnodelist;
   v_xml_Node      Dbms_Xmldom.Domnode;


   v_empno         number;
   v_ename         varchar2(20);
   v_job           varchar2(20);
   v_hiredate      varchar2(20);
   v_errorMsg      varchar2(20);

Begin
      -- CLOB data

  v_Xml_Clob :=pRawXMLdata ;

  IF pOperation = 'RawUpload' THEN
       -- Create XML Parser.
       v_parser  := Dbms_Xmlparser.Newparser;
       -- Parse XML into DOM object                   
       Dbms_Xmlparser.Parseclob(v_parser , v_Xml_Clob);
       -- XML Document             
       v_Doc := Dbms_Xmlparser.Getdocument(v_parser );
       -- Root element
        v_Child_Node:=dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(v_doc),'/employees/employee');
       --
       For I in 0..dbms_xmldom.getlength(v_Child_Node)-1 LOOP
            v_xml_Node := dbms_xmldom.item(v_Child_Node,I);
         
            DBMS_XSLPROCESSOR.valueof(v_xml_Node,'empno/text()',v_empno);
            DBMS_XSLPROCESSOR.valueof(v_xml_Node,'ename/text()',v_ename);
            DBMS_XSLPROCESSOR.valueof(v_xml_Node,'job/text()',v_job);
            DBMS_XSLPROCESSOR.valueof(v_xml_Node,'hiredate/text()',v_hiredate);
         
            ---Validation Script---
            If v_job='NA' Then
                v_errorMsg:= 'Job code should not be NA';
                GOTO PrintError;
            End if;
         
            If v_hiredate is NULL Then
                v_errorMsg:='Hiredate cannot be blank';
                GOTO PrintError;
            End if;
         
            insert into HR_temp(col1, col2, col3, col4, col5,col6,col7)
            values (v_empno,v_ename,v_job,v_hiredate,pSessionId, pTransType, pOperation);
         
            <<PrintError>>
            insert into HR_temp_ERROR(Error,Status, col1, col2, col3, col4, col5,col6,col7)
            values (v_errorMsg,'Failed',v_empno,v_ename,v_job,v_hiredate,pSessionId, pTransType, pOperation);
         
         
        End LOOP; 
 ELSE
      dbms_output.put_line('in else block');
    for I in
            (select col1 EmpNo, col2 EName, col3 Job, col4 HireDate, col6 TransType from hr_temp
            where pOperation='CommitUpload' and col5=pSessionId)
    loop
    dbms_output.put_line('in for loop');
        If I.TransType='ADD' OR I.TransType='REMOVE AND ADD' THEN
         dbms_output.put_line('in if  block');
     
            insert into emp(empno, ename, job, hiredate) values(I.EmpNo,I.EName,I.Job,I.HireDate);
         
        END IF;
    end loop; 

 

 END IF;


End;

/

--Call procedure proc_parseXml

declare
    v_rawXMLData clob; 
    v_SessionId varchar2(20); 
    v_TransType varchar2(20); 
    v_Operation varchar2(20);
begin
    v_TransType:='ADD';
    v_SessionId:='qwer1234';
    v_Operation:='RawUpload';
    
    
 v_rawXMLData :=  '<employees> <employee> <empno>7369</empno><ename>SMITH</ename> <job>CLERK</job> <hiredate>17-DEC-1980</hiredate> </employee>
     <employee><empno>7499</empno><ename>ALLEN</ename><job>SALESMAN</job><hiredate>20-FEB-1981</hiredate></employee></employees>';
     

    proc_parseXml_new(v_SessionId,  v_TransType, v_Operation , v_rawXMLData );
end;

/


declare
    v_rawXMLData clob; 
    v_SessionId varchar2(20); 
    v_TransType varchar2(20); 
    v_Operation varchar2(20);
begin
    v_TransType:='ADD';
    v_SessionId:='qwer1234';
    v_Operation:='CommitUpload';
    
    
 v_rawXMLData :=  '<employees> <employee> <empno>7369</empno><ename>SMITH</ename> <job>CLERK</job> <hiredate>17-DEC-1980</hiredate> </employee>
     <employee><empno>7499</empno><ename>ALLEN</ename><job>SALESMAN</job><hiredate>20-FEB-1981</hiredate></employee></employees>';
     

    proc_parseXml_new(v_SessionId,  v_TransType, v_Operation , v_rawXMLData );
end;

/




Comments

Popular posts from this blog

Table high water mark tips

Create table of two consecutive months if date range belong to two months

Fill null values with last non-null amount - Oracle SQL