CREATE FUNCTION p_test(p_a char(20)) RETURNING char(30),char(35); DEFINE g_a char(7); DEFINE g_b char(20); DEFINE g_c char(7); DEFINE g_d char(6); DEFINE g_e char(20);
DEFINE r_a char(30); DEFINE r_b char(35); DEFINE r_tmp char(7);
LET r_a = ''; LET r_tmp = '';
FOREACH cursor1 FOR SELECT a, b, c, d, e INTO g_a, g_b, g_c, g_d, g_e FROM tab WHERE nvl(a,'%') like trim(p_a)||'%' ORDER BY a
IF r_tmp = '' THEN LET r_tmp = g_a; LET r_a = g_b +'('+g_a+')'; LET r_b = g_c + '('+g_d+')'; ELIF r_tmp != '' AND r_tmp = g_a THEN LET r_tmp = g_a; LET r_b = r_b + ',' + g_c + '('+g_d+')'; ELIF r_tmp != '' AND r_tmp != g_a THEN RETURN r_a, r_b; LET r_tmp = g_a; LET r_a = g_b +'('+g_a+')'; LET r_b = g_c + '('+g_d+')'; END IF END FOREACH END FUNCTION
Query 결과 데이터 a b c d e A0001 홍길동 전남 10001 T A0001 홍길동 전북 10002 T A0001 홍길동 경남 10003 T A0002 김철수 전남 20001 T A0002 김철수 전북 20002 T
결과 r_a : 홍길동(A0001) r_b : 전남(10001), 전북(10002), 경남(10003)
r_a : 김철수(A0002) r_b : 전남(20001), 전북(20002)
위의 함수를 돌렸을 경우 query는 위와 같이 결과가 나오고 이를 if-else를 통해 r_a : 홍길동(A0001) r_b : 전남(10001), 전북(10002), 경남(10003) 이런식으로 한세트씩 결과를 만들고 이들을 return하구 싶은겁니다.. 근데 왠지 어설프네요.. 도움좀 주십시요.. ㅠ.ㅠ
|