XML
DECLARE
F UTL_FILE.FILE_TYPE;
MYCLOB CLOB;
BEGIN
SELECT
DBMS_XMLGEN.GETXML('SELECT FIRST_NAME, SALARY FROM EMP WHERE ROWNUM <= 5')
INTO MYCLOB
FROM DUAL;
F := UTL_FILE.FOPEN('NEW','EMP_DEPT.XML','w',32767);
UTL_FILE.PUT(F,MYCLOB);
UTL_FILE.FCLOSE(F);
END;
/
INSERT INTO TEST_XML (A)
VALUES ('
Steven
25000
Neena
17000
Lex
17000
Michael
13000
Steven
6000
');
SELECT extract(value(d), '//FIRST_NAME/text()').getStringVal() AS FIRST_NAME,
extract(value(d), '//SALARY/text()').getNumberVal() AS SALARY
FROM xml_tab x,
table(xmlsequence(extract(x.xmlval, '/ROWSET/EMP'))) d;
CREATE TABLE T_XML_ORDERS(ORDERS XMLTYPE);
CREATE OR REPLACE PROCEDURE SP_BULK_ORDERS
(
IN_ORDERS IN CLOB,
OUT_ORDER_DETAILS OUT SYS_REFCURSOR
)
AS
BEGIN
INSERT INTO T_XML_ORDERS VALUES (XMLTYPE(IN_ORDERS));
COMMIT;
OPEN OUT_ORDER_DETAILS FOR
SELECT extract(value(d), '//EXCHANGE/text()').getStringVal() AS EXCHANGE,
extract(value(d), '//ORDER_ID/text()').getNumberVal() AS ORDER_ID
FROM T_XML_ORDERS x,
table(xmlsequence(extract(x.ORDERS, '/ROWSET/ROW'))) d;
END;
/
VARIABLE X REFCURSOR;
DECLARE
I CLOB := '
Steven
25000
Neena
17000
Dinesh
17000
Alexander
9000
Bruce
6000
';
BEGIN
SP_PLACE_ORDERS(
IN_ORDERS=>I,
OUT_ORDER_DETAILS=>:X
);
END;
/
PRINT X;
CREATE TABLE T1(ORDERS XMLTYPE);
create or replace procedure sp_place_orders(in_orders in clob, o out sys_refcursor)
as
x xmltype;
begin
x := xmltype(in_orders);
execute immediate 'truncate table t1';
insert into t1 values (x);
open o for
SELECT extract(value(d), '//FIRST_NAME/text()').getStringVal() AS FIRST_NAME,
extract(value(d), '//SALARY/text()').getNumberVal() AS SALARY
FROM t1 x,
table(xmlsequence(extract(x.orders, '/ROWSET/ROW'))) d;
end;
/
variable j refcursor;
declare
i clob := ' Steven 24000
Dinesh 17000
Hari 17000
Alexander 9000
Bruce 6000
';
begin
sp_place_orders(in_orders=>i,o=>:j);
end;
/
print j;
select
c.owner,
c.object_name,
c.object_type,
b.sid,
b.serial#,
b.status,
b.osuser,
b.machine
from
v$locked_object a ,
v$session b,
dba_objects c
where
b.sid = a.session_id
and
a.object_id = c.object_id;
ALTER SYSTEM KILL SESSION '30,666' IMMEDIATE;
LOCK TABLE EMPLOYEES IN SHARE MODE NOWAIT;