1
是否有一个简单而优雅的方法来返回Oracle中两个无序的分隔列表之间的区别?两个无序的删除列表之间的区别(Oracle)
实施例:
- 列表A:A1,B4,G3,H6,T8,A0
- 列表B:B4,H6,A0,T8,A1
差异:G3
是否有一个简单而优雅的方法来返回Oracle中两个无序的分隔列表之间的区别?两个无序的删除列表之间的区别(Oracle)
实施例:
差异:G3
如果您有权访问APEX_UTIL
,则可以将字符串解析为数组,然后将其转换为集合,然后使用MULTISET EXCEPT
(与MINUS相同,但是用于集合):
SET SERVEROUT ON
DECLARE
TYPE set_t IS TABLE OF varchar2(100);
listA APEX_APPLICATION_GLOBAL.vc_arr2;
listB APEX_APPLICATION_GLOBAL.vc_arr2;
excpt set_t;
FUNCTION to_set_t (arr IN APEX_APPLICATION_GLOBAL.vc_arr2)
RETURN set_t IS
rset set_t := set_t();
BEGIN
rset.EXTEND(arr.COUNT);
FOR i IN 1..arr.COUNT LOOP
rset(i) := TRIM(arr(i));
END LOOP;
RETURN rset;
END;
BEGIN
-- parse lists into arrays
listA := APEX_UTIL.string_to_table('a1, b4, g3, h6, t8, a0',',');
listB := APEX_UTIL.string_to_table('b4, h6, a0, t8, a1',',');
-- convert arrays to collections, then do the minus
excpt := to_set_t(listA) MULTISET EXCEPT to_set_t(listB);
-- display the results
FOR i IN 1..excpt.COUNT LOOP
DBMS_OUTPUT.put_line(excpt(i));
END LOOP;
END;
结果:在MULTISET运营商,这是在10g中引入
g3
归它,你可以使用[负](HTTP:// WWW。 orafaq.com/wiki/Minus) – 2011-04-17 05:41:53
当你说“两个分隔列表”时,你的意思是两个字符串? – Gabe 2011-04-17 05:57:35
对不起加贝 - 是两个字符串,所以“a1,b4,g3,h6,t8,a0”和“b4,h6,a0,t8,a1” – Darren 2011-04-17 10:13:54