嵌套表有多列时使用 MEMBER OF 函数

问题描述 投票:0回答:1

当嵌套表只有一列时,曾多次成功使用

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;
oracle-database plsql
1个回答
0
投票

向对象添加

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

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.