PL/SQL 具有多列记录的成员

PL/SQL Member of with multicolumn record

如何将 member of 用于多列集合?

试过这个:

declare
   TYPE t_ref_by_email_rec IS RECORD (
           email varchar(100)
         , ref   number
   );
   TYPE t_ref_by_email IS TABLE OF t_ref_by_email_rec INDEX BY BINARY_INTEGER;
   v_ref_by_email t_ref_by_email := t_ref_by_email();
begin
   if 'email@domain.com' member of v_ref_by_email.email then
      -- Do something
   end if;
end;

没有

  • MEMBER OF 运算符仅对集合数据类型有效。
  • TYPE identifier IS TABLE OF type1 INDEX BY type2 不是集合;它是一个关联数组。
  • TYPE identifier IS TABLE OF type1 是您定义集合的方式。

但是,即使这样,您也不能对集合的部分属性使用 MEMBER OF;您将需要使用它来匹配整个集合元素(并且它似乎不适用于记录)。

相反,您可以使用循环:

DECLARE
   TYPE t_ref_by_email_rec IS RECORD (
           email varchar(100)
         , ref   number
   );
   TYPE t_ref_by_email IS TABLE OF t_ref_by_email_rec;
   v_ref_by_email t_ref_by_email := t_ref_by_email(
     t_ref_by_email_rec( 'a@b', 1 ),
     t_ref_by_email_rec( 'c@d', 2 ),
     t_ref_by_email_rec( 'e@f', 3 ),
     t_ref_by_email_rec( 'g@h', 4 )
   );
BEGIN
  FOR i IN 1 .. v_ref_by_email.COUNT LOOP
    IF 'e@f' <> v_ref_by_email(i).email THEN
      CONTINUE;
    END IF;
    DBMS_OUTPUT.PUT_LINE( 'Found' );
  END LOOP;
END;
/