2012-09-19 2 views
0

기본 키가 claims_id 인 테이블을 가지고 있지만 레거시 이유로 인해 claims_id 또는 claim_id 매개 변수 중 하나를 사용하여 레코드를 조회 할 수 있어야합니다. 이것을 어떻게 할 수 있습니까? 나는 전에 검색 쿼리에 대해 다음과 같은 패턴을 사용했습니다 :SQL databroker 작업에서 매개 변수 별칭을 어떻게 구현합니까?

select... 
where (
     {$claims_id} is null 
     or 
     claims.claims_id = {$claims_id} 
     ) 
     and 
     (
     {$claim_id} is null 
     or 
     claims.claims_id = {$claim_id} 
     ) 

을 ...하지만 당신이하지 않는 쿼리에 두 매개 변수를 제공 할 수 있기 때문에 이것은 단지, 나에게 아주 잘하지 않는 것 어떤 의미가 있습니다. 이와 같은 것을 달성하는 올바른 방법은 무엇입니까?

이러한 테이블은 크기가 크기 때문에 아무 것도 선택하지 않은 이유는 매개 변수가 지정되지 않은 경우 쿼리에서 아무 것도 반환하지 않습니다.

업데이트 : 해당 데이터베이스가 DB2임을 유의하십시오.

+0

매개 변수가 수동으로 지정되었거나 묵시적입니까 (예 : dataset-param)? –

+1

WHERE 절에서 ISNULL (Column1, Column2) = ISNULL (Parameter1, Parameter2)을 사용할 수 있습니다. 하지만 응용 프로그램에 따라 달라질 수 있습니다. 로직 – Prasanna

+0

@TristanWilkinson을 수동으로 사용합니다. 데이터 브로커를 동적으로 선택하기 때문에 작업은 다른 databroker의 유사한 작업과 동일한 인터페이스를 준수해야합니다. –

답변

3

를 단지 하나 개의 매개 변수 이름을 허용하도록 브로커를 조정할 수없는 경우, 다음 내 추천은 운영을위한 사전 작업 흐름을 가지고있는 두 매개 변수의 존재를 확인하고 필요에 따라 매개 변수를 조정합니다. 가장 간단한 예를 들어

,
<workflow> 
    <if test="not-equal" value1="{$parameters.claims_id}" value2=""> 
    <then> 
     <set-field field="parameters.claim_id" value="{$parameters.claims_id}"/> 
    </then> 
    </if> 
</workflow> 

그런 다음 쿼리에서 당신은 단지 claim_id 매개 변수와 함께 자신을 우려한다.

이렇게하면 두 매개 변수가 어떤 방식으로 처리되거나 기록되는 상황도 허용됩니다.

+1

+1. A는 문제를 다루는 것이 더 적절한 방법이라는 데 동의합니다. 검사 할 테이블에는 ID 필드가 하나 뿐이므로 쿼리를 호출하기 전에 응용 프로그램에서 쿼리의 매개 변수를 처리해야합니다. – Vlad

0

나는 보통 매개 변수 중 하나는 우선 순위가 식별과 유사한 쿼리 뭔가 구조 것 : 여기

select... 
where (
      {$claims_id} is null 
      and 
      (
       {$claim_id} is null 
       or 
       claims.claims_id = {$claim_id} 
      ) 
     ) 
    or claims.claims_id = {$claims_id} 

가 기본 옵션으로 선택을 claims_id을 다음 보조로을 claim_id.

+0

두 매개 변수가 모두 null 인 경우 * 모든 레코드를 반환하는 것처럼 보입니다. 이는 피하고 싶습니다. null 인 두 매개 변수 모두 행을 반환하거나 오류가 발생해야합니다. –

0

당신은 할 수 :

select 
. 
. 
where coalesce({$claims_id},{$claim_id}) is null 
    or coalesce({$claims_id},{$claim_id}) = claim_id 
+0

이것은 전반적으로 좋은 이유는 무엇입니까?두 매개 변수를 모두 지정하지 않으면 모든 레코드를 반환하는 단일 결과를 반환하기위한 작업을 수행하지 않겠습니까? –

+0

예, 전반부는 모든 레코드를 반환합니다. 그 제안에 대해서는 – savs