【发布时间】:2019-08-11 18:13:16
【问题描述】:
我有以下表格:
create table TBL$ORDERS
(
order_num VARCHAR2(25),
employee VARCHAR2(100),
createddt VARCHAR2(20),
modifieddt VARCHAR2(20),
deleteddt VARCHAR2(20),
state VARCHAR2(15),
ts VARCHAR2(20),
nni VARCHAR2(20),
constraint pk_orders primary key (order_num)
);
create table TBL$METERS
(
order_num VARCHAR2(25),
xmlid VARCHAR2(5),
createddt VARCHAR2(20),
modifieddt VARCHAR2(20),
deleteddt VARCHAR2(20),
vendor VARCHAR2(25),
model VARCHAR2(25),
serial VARCHAR2(25),
constraint pk_meters primary key (order_num, xmlid),
constraint fk_orders foreign key (order_num) references TBL$ORDERS (order_num)
);
create table TBL$TESTS
(
order_num VARCHAR2(25),
meterxmlid VARCHAR2(5),
xmlid VARCHAR2(5),
createddt VARCHAR2(20),
testcount VARCHAR2(5),
successcount VARCHAR2(5),
test1 VARCHAR2(50),
test2 VARCHAR2(50),
test3 VARCHAR2(50),
test4 VARCHAR2(50),
constraint pk_tests primary key (order_num, meterxmlid, xmlid),
constraint fk_meters foreign key (order_num, meterxmlid) references TBL$METERS (order_num, xmlid)
);
我想用这段代码填充:
procedure PopulateTables(pXMLClob clob) is
begin
for recOrders in (
select *
from XMLTable(
'/Orders/Order'
passing XMLType(pXMLClob)
columns
order_num VARCHAR2(25) path '@order_num',
employee VARCHAR2(100) path '@employee',
createddt VARCHAR2(20) path '@createdDT',
modifieddt VARCHAR2(20) path '@modifiedDT',
deleteddt VARCHAR2(20) path '@deletedDT',
state VARCHAR2(15) path '@state',
ts VARCHAR2(20) path '@ts',
nni VARCHAR2(20) path '@nni',
Meters xmltype path 'Meter'
)
)
loop
insert into TBL$ORDERS(order_num, employee, createddt, modifieddt, deleteddt, state, ts, nni)
values (recOrders.order_num, recOrders.employee, recOrders.createddt, recOrders.modifieddt, recOrders.deleteddt, recOrders.state, recOrders.ts, recOrders.nni);
for recMeters in (
select *
from XMLTable(
'/Orders/Order'
passing XMLType(recOrders.Meters)
columns
xmlid VARCHAR2(5) path '@xmlid',
createddt VARCHAR2(20) path '@createdDT',
modifieddt VARCHAR2(20) path '@modifiedDT',
deleteddt VARCHAR2(20) path '@deletedDT',
vendor VARCHAR2(25) path '@vendor',
model VARCHAR2(25) path '@model',
serial VARCHAR2(25) path '@serial',
order_num VARCHAR2(25) path '@order_num',
tests xmltype path 'test'
)
)
loop
insert into TBL$METERS (order_num, xmlid, createddt, modifieddt, deleteddt, vendor, model, serial)
values (recOrders.order_num, recMeters.xmlid, recMeters.createddt, recMeters.modifieddt, recMeters.deleteddt, recMeters.vendor, recMeters.model, recMeters.serial);
for recTest in (
select *
from XMLTable(
'/Orders/Order'
passing XMLType(recMeters.Tests)
columns
xmlid VARCHAR2(5) path '@xmlID',
createddt VARCHAR2(20) path '@createdDT',
testcount VARCHAR2(5) path '@testCount',
successcount VARCHAR2(5) path '@successCount',
test1 VARCHAR2(50) path '@test1',
test2 VARCHAR2(50) path '@test2',
test3 VARCHAR2(50) path '@test3',
test4 VARCHAR2(50) path '@test4',
meter_xmlid VARCHAR2(5) path '@xmlID',
order_order_num varchar(25) path '@order_num'
)
)
loop
insert into TBL$TESTS (xmlid, createddt, testcount, successcount, test1, test2, test3, test4, meter_xmlid , order_order_num )
values (recTest.xmlid, recTest.createddt, recTest.testcount, recTest.successcount, recTest.test1, recTest.test2, recTest.test3, recTest.test4, recMeters.xmlid, recOrders.Order_num);
end loop;
end loop;
end loop;
commit;
end;
我在传递 XMLTYPE() 的行中遇到错误。
ora-00306 调用 XMLTYPE 时类型或参数的数量错误。
谁能告诉我如何解决这个问题?
【问题讨论】:
-
请将您的代码直接提供给 Stack Overflow
-
请添加完整的错误信息,包括行号。它也将有助于尽可能减少代码。代码越大,别人看的可能性就越小。
标签: xml parsing plsql procedure