This Post will having the details to create stored procedure in oracle and parsing the clob data through stored procedure.
employee.xml -------------Above xml will be stored as clob data in Person tablesiva 32 M
Person table Schema -
Id NUMBER,
Name Varchar2(50),
employee_details clob
Above xml will be stored as clob data in Person table
create table PERSON (Id NUMBER, Name varchar2(50), employee_details clob); create table EMPLOYEE (Name varchar2(50), age NUMBER ,sex varchar2(10));We need to parse the clob data using oracle procedure
create or replace PROCEDURE SP_PARSE_CLOB (person_id NUMBER) AS
PERSION_ID Person.id%type;
PERSON_NAME Person.name%type;
EMPLOYEE_DETAILS Person.employee_details%type;
name varchar2(50);
age varchar2(50);
sex varchar2(50);
EMPLOYEE_exc EXCEPTION;
-- Create a cursor
cursor personDataCursor IS SELECT id, Name,employee_details from PERSON;
BEGIN
OPEN personDataCursor;
LOOP
FETCH personDataCursor into PERSION_ID,PERSON_NAME,EMPLOYEE_DETAILS;
EXIT WHEN personDataCursor%notfound;
IF XMLTYPE(EMPLOYEE_DETAILS).existSNode('/Employee/name/text()') > 0 THEN
name := XMLTYPE(EMPLOYEE_DETAILS).extract('/Employee/name/text()').getStringVal();
END IF;
IF XMLTYPE(EMPLOYEE_DETAILS).existSNode('/Employee/age/text()') > 0 THEN
age := XMLTYPE(EMPLOYEE_DETAILS).extract('/Employee/age/text()').getStringVal();
END IF;
IF XMLTYPE(EMPLOYEE_DETAILS).existSNode('/Employee/sex/text()') > 0 THEN
sex := XMLTYPE(EMPLOYEE_DETAILS).extract('/Employee/sex/text()').getStringVal();
END IF;
dbms_output.put_line('Name:'|| name|| ' ' || 'Age:' || ' ' ||age || ' ' || 'Sex:' || ' ' || sex);
-- Inset into another table
BEGIN
insert into EMPLOYEE(name,age,sex) values(name,age,sex);
EXCEPTION
WHEN OTHERS
THEN
RAISE EMPLOYEE_exc;
END;
commit;
END LOOP;
EXCEPTION
WHEN EMPLOYEE_exc
THEN
rollback;
-- Do what ever you want like insert log details in any another table
commit;
DBMS_OUTPUT.PUT_LINE ('Insertion failed in EMPLOYEE : '|| '' || name);
END;