有一项任务是将'requirement'的值插入表'agg'中。请告诉我怎么办?这里的当前代码只显示其中一个值的结果,第一个是具体的,如何才能使结果全部三个值?
INSERT INTO test
VALUES (4,xmltype (
'<export>
<responsibleOrg>
<regNum>01731000018</regNum>
</responsibleOrg>
<requirements>
<requirement>
<code>8403975</code>
<name>Требование об отсутствии в предусмотренном Федеральным законом № 44-ФЗ реестре недобросовестных поставщиков </name>
</requirement>
<requirement>
<code>8632410</code>
<name>Единые требования к участникам </name>
</requirement>
<requirement>
<code>8361978</code>
<name>Иные дополнительные требования к участникам </name>
</requirement>
</requirements>
</export>'));
DECLARE res NUMBER;
BEGIN
FOR r IN
(
SELECT t.id
FROM test t
)loop
sys.DBMS_OUTPUT.put_line('Номер файла №'|| ' '||r.id);
FOR r2 IN
(
SELECT x.*,k.*
FROM test t,
xmltable('export/responsibleOrg'
passing t.DATA
COLUMNS
regnum varchar2(50) path 'regNum')k,
XMLTABLE ('export/requirements/requirement'
PASSING t.DATA
COLUMNS
code VARCHAR2(100) PATH 'code',
name varchar2(100) path 'name') x
WHERE t.id = 4
)loop
IF r2.regNum IS NOT NULL THEN
SELECT COUNT(*)
INTO res
FROM agg a
WHERE a.regNum = r2.regNum;
IF res = 0 THEN
INSERT INTO agg(REGNUM,code,name)VALUES(r2.regnum,r2.code,r2.name);
END IF;
END IF;
END loop;
END loop;
END;
不介意俄语字母,这里没有任何用西里尔语写的命令。
答案 0 :(得分:1)
它只插入第一行,因为使用 regNum 字段有一个寄存器计数,只有当计数器为0时才会插入行。
由于此字段对于所有三行具有相同的值,您应该更改计数器或将其删除。
答案 1 :(得分:0)
看到您已经使用xmltable查询xml列,您可以直接在insert语句中使用它,例如:
// Variables
var waarde = {
amount:2
};
$(document).ready(function(){
updateValues();
$('#click2').click(function(){
waarde.amount++;
updateValues();
});
});
function updateValues(){
document.getElementById("click2").innerHTML = waarde.amount;
}
如果您需要排除表格中已有的行等,则可以在上述语句中添加任何其他过滤器。
请记住,在处理数据库时,您应该考虑集合 - 逐行处理(例如您正在进行的处理)极其低效(有点像在驱动器底部交付砖块然后选择它们)一次一个,把它们带到你正在使用它们的地方。更好的方法是让面包车把它们送到那个地方,对吧?!)