Job/정리

XQuery의 Join

외곈 2009. 2. 3. 01:25

A라는 List타입의 $value라는 놈에서 value의 특정 element의 data가

또 다른 특정 data와 일치하는지의 여부를 비교하여 다른 결과값을 리턴해주는

로직을 구현하려 한다. 일반적인 java코딩에서는 for문을 돌아 조건이 맞을때

결과값을 리턴해주거나 변수에 값을 할당하고 break을 걸어주면 되는 간단한 이 로직이

Xquery로 했을경우 너무 삽질을 많이 했다.

 

BEA에서 Xquery pdf를 내려받아보니 이런 부분을 발견.

left branch의 CUSTOMER()만큼 반복하며($customer란놈으로 assign)

다시 right branch의 CUST_ORDER() 만큼 반복하며($c_order란놈으로 assign)

customer의 CUSTOMER_ID와 c_order의 CUSTOMER_ID가 동일할경우

customer의 LAST_NAME element와 c_order의 ORDER_ID element를 리턴해주는 Xquery.

 

for $customer in CUSTOMER()   // LEFT Branch

for $c_order in CUST_ORDER()   // RIGHT Branch

where $customer/CUSTOMER_ID eq $c_order/CUSTOMER_ID

return <t>{$customer/LAST_NAME, $c_order/ORDER_ID}</t>

 

이놈을 보니 아..대충 답이 나오는구나.

대충 응용을 해보니..

 

 for $return_value  in

($getUKeySubscribedValueAddedSvcListResponse1/ns2:return/ns3:value)

return

     if ($return_value/ns3:prod_id = data 

($checkSubscribedValueAddedSvc1/ns2:inVO/ns0:PROD_ID)) then ("Y")

     else ("N")

 

내가 원하는 Branch의 값을 $return_value로 정의를 하고 반복을 하면서

해당 value의 PROD_ID값과 입력받은 파라미터의 prod_id와 비교하여 값이 같을경우

Y를 리턴. 다를경우 N를 리턴하게끔 하였다.

XQuery에는 break가 없는건가...하며 한동안 삽질하였던;;