2013-05-14 1 views
3

나는 행을 업데이트하는 업데이트 SQL 문이업데이트 SQL

UPDATE COM_TRANSACTION_LOGS  
     SET END_TIME = ?, 
     RESPONSE = ? 
    WHERE 
    TRANSACTION_ID = ? 
    AND  
    MESSAGE_ID = ? 

여기서 문제는 업데이트 SQL이

으로 제공하도록 MESSAGE_ID이 경우에 null이 될 수 있다는 것입니다 이 where 절은

WHERE 
    TRANSACTION_ID = '123XYZAAA1236511' 
    AND  
    MESSAGE_ID = null 

방법처럼되기 때문에 업데이트에 실패

[DEBUG] {pstm-100101} Parameters:[2013-05-14 10:38:01.485, XML, 123XYZAAA1236511, null] 

준비된 문을 통해 null 값과 비교할 수 있습니까?

나는이

WHERE 
    TRANSACTION_ID = '123XYZAAA1236511' 
    AND  
     MESSAGE_ID is null 

가 어떻게 두 개의 쿼리를 사용하고 null의 경우에는 조건을 사용하지 않고 내 준비된 문이 is null으로 where 절을 설정 말할 수처럼 널 비교 절은이 곳이 될 알고 또는 ='somevalue

+0

무제한의 다른 명령문이 없으면 두 개의 준비된 명령문을 사용하면 bgi에 문제가 없어야합니다. – gpeche

답변

4

는이 라인을 교체 할 수 있습니다. 그것은 일을 끝낸다.

+0

고마워요 @ 애드리안이 일했습니다 :) – NullPointerException

4

오라클에는이를 수행하기위한 문이 NVL입니다 (nvl(?, value_to_replace_null)). 나는 당신이 사용하고있는 SQL의 변형이 무엇인지 모르겠지만 아마 비슷한 것이있을 것이다. SQL Server 및 MySQL에도 IFNULL, ISNULL, and COALESCE을 사용할 수 있습니다. 이로써

MESSAGE_ID = ? 

: 나는 당신의 목적을 위해 NVL/NVL2를 사용하여 선호

COALESCE(MESSAGE_ID,-1) = COALESCE(?,-1) 
+0

nvl이 작동하지 않았습니다. log 문은 업데이트 쿼리를 ** UPDATE COM_TRANSACTION_LOGS SET END_TIME =?, RESPONSE =?로 표시합니다. WHERE MESSAGE_ID = NVL (?, 'NULL') AND TRANSACTION_ID =? ** – NullPointerException

+0

@NullPointerException - Adrian이 'coalesce'와 같은 값을 가지게하려면 테스트의 양쪽면에 nvl이 필요합니다. 더 휴대 가능함). 두 가지 방법 중 하나를 택하면 선택한 '마법'값이 실제 데이터에 존재할 수 없다는 점에 유의해야합니다. –

+0

고마워요 :) – NullPointerException

0