我有一个正在使用的SQL表,就像队列一样,其中一列是XMLType。我要对表进行的操作是创建一个程序以提取数据的特定部分,遍历表,读取信息,然后在完成后删除该行。完成后,我不能只擦除整个表,因为并非所有数据都需要删除。
我当前的解决方案:
FOR xml_data FROM (SELECT xml_column from table_a)
LOOP
-- Process the data
...
--- Delete the row
DELETE FROM table_a where xml_column = xml_data.xml_column;
END LOOP;
但是,我在删除部分遇到了一个问题,引发了错误:
Error report -
ORA-22950: cannot ORDER objects with MAP or ORDER method
...
Action: Define a MAP or ORDER method for the object type
有人知道解决方案是什么吗?我也欢迎其他解决方案在迭代后删除行。
编辑:修复代码
答案 0 :(得分:3)
不能轻易将大型或复杂对象与等号进行比较。 Oracle试图在这里拯救您,因为比较大型对象可能会导致性能问题,并且有多种比较XML的方法。错误消息.bind
告诉您,如果您构建了特定的比较功能,则可以比较对象。
但是在这种情况下,不需要直接比较XML。如果要遍历表中的行,则通过var ftp_list = promisify(c.list.bind(c))
(这是指向行位置的物理指针)识别行的速度要快得多。
ORA-22950