【发布时间】:2016-09-29 08:13:18
【问题描述】:
我有一个程序获得了对象表类型的变量:
lsa_final_filter_ports t_modifylink_multicolumnlist;
lsa_initial_filter_ports t_modifylink_multicolumnlist;
t_modifylink_multicolumnlist的定义是:
CREATE OR REPLACE TYPE "T_MODIFYLINK_MULTICOLUMNLIST" IS TABLE OF o_modifylink_multicolumnlist;
TYPE o_modifylink_multicolumnlist AS OBJECT(some properties);
lsa_final_filter_ports 变量是这样填充的
SELECT b.name INTO ls_bandwidth_name FROM bandwidth b
WHERE b.bandwidthid = lna_compatible_port_bw(i);
SELECT CAST(MULTISET(SELECT *
FROM TABLE(piosa_all_ports)
WHERE ITEMNAME4 = ls_bandwidth_name)
AS t_modifylink_multicolumnlist)
INTO lsa_final_filter_ports
FROM dual;
其中piosa_all_ports 是具有相同类型t_modifylink_multicolumnlist 的I/O 参数
第二个参数在过程开始时使用过程具有的第二个 I/O 参数进行初始化
lsa_initial_filter_ports := piosa_filtered_ports;
我想要实现的是检查lsa_final_filter_ports 中的对象是否存在于lsa_initial_filter_ports 中,如果存在则跳过在lsa_initial_filter_ports 中添加该对象,这将是外部调用过程使用的输出参数。
我尝试的是遍历 lsa_final_filter_ports 对象并检查该对象是否已经存在,如下所示:
FOR i in 1..lsa_final_filter_ports.COUNT LOOP
IF lsa_final_filter_ports(i) MEMBER OF lsa_initial_filter_ports THEN
CONTINUE;
END IF;
lsa_initial_filter_ports.EXTEND();
lsa_initial_filter_ports(lsa_initial_filter_ports.COUNT) := lsa_final_filter_ports(i);
END LOOP;
但是使用此代码,我收到以下错误:
错误:PLS-00801:内部错误 [*** ASSERT at file pdw4.c, line 2181;类型 0x0x7f991127aef8 没有 MAP 方法。 NR_WIZARDVALIDATIONS__CUSTOMISATIONS__B__166833[33]
我不确定是否可以进行这种比较,也许有人可以澄清一下。
谢谢
【问题讨论】:
-
您使用的是哪个 Oracle 版本?从这个link来看,这个错误发生在Oracle 10g中。
-
我使用的是 oracle 11.2.0