我正在将存储过程代码从 Oracle 迁移到 DB2,我需要找到一种方法来测试数组成员资格(Oracle 有一个MEMBER OF
运算符)。
除其他外,存储过程使用一组用户(通过 JDBC 作为 Java 代码的参数接收)。我想找到在该数组中进行成员资格测试的最有效方法。使用 Oracle,我会这样做:
FOR r IN (SELECT * FROM acls WHERE acls.id = curid) LOOP
IF r.user MEMBER OF users THEN
RETURN 1;
END IF;
END LOOP;
MEMBER OF
但是我在 DB2 中找不到等效项:
FOR r AS SELECT * FROM acls WHERE acls.id = curid DO
IF r.user ????? users THEN
RETURN 1;
END IF;
END FOR;
我看到两种选择:
- 对所有数组元素执行另一个内部循环以“手动”进行测试。
- 不要使用数组,而是使用单个字符串并使用
LIKE
基于 - 的模式匹配。
有没有更好的办法?请记住,数组来自外部代码,不能作为我可以JOIN
或任何相关的表传递。