当嵌套表只有一列时,曾多次成功使用
MEMBER OF
功能。但现在有一种情况,嵌套表有多列。
当 COLUMN2 值与 TABLEA 匹配时,是否可以使用
MEMBER OF
函数,然后返回相应的 COLUMN1 值。
嵌套表 (
TABLEA
)
第1栏 | 第2栏 |
---|---|
1 | AA |
2 | BB |
3 | 抄送 |
4 | DD |
下面的代码出错了。请协助如何处理这种情况。
IF 'AA' MEMBER OF TABLEA.COLUMN2 THEN
DBMS_OUTPUT.PUT_LINE(TABLEA.COLUMN1);
ELSE
DBMS_OUTPUT.PUT_LINE('NOT Found.');
END IF;
向对象添加
MAP MEMBER FUNCTION
,以便您可以在映射列上进行比较:
CREATE TYPE obj_type IS OBJECT(
column1 NUMBER,
column2 VARCHAR2(10),
MAP MEMBER FUNCTION compare RETURN VARCHAR2
);
CREATE TYPE BODY obj_type
IS
MAP MEMBER FUNCTION compare RETURN VARCHAR2
IS
BEGIN
RETURN column2;
END;
END;
/
CREATE TYPE obj_tab_type IS TABLE OF obj_type;
然后你可以使用:
DECLARE
tablea obj_tab_type := obj_tab_type(
obj_type(1, 'AA'),
obj_type(2, 'BB'),
obj_type(3, 'CC'),
obj_type(4, 'DD')
);
BEGIN
IF obj_type(1, 'AA') MEMBER OF TABLEA THEN
DBMS_OUTPUT.PUT_LINE('Found');
ELSE
DBMS_OUTPUT.PUT_LINE('Not Found.');
END IF;
END;
/
哪个输出:
Found