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;
/
如何将 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;
/