2016-08-18 3 views
1

나는 다음과 같은 DAO 방법이 있습니다자바 네이티브 SQL 쿼리는 모든 값을 표시합니다

public String getSomeTable(final String param1) { 
    String sqlString = "select * from table where name ilike ?"; 
    Query query = this.getEntityManager().createNativeQuery(sqlString); 

    query.setParameter(1, "%param1%"); 
} 

경우 param1null 또는 빈 후 나는 테이블에서 모든 항목을 선택합니다을. 이 작업을 수행하는 올바른 방법은 무엇입니까? 현재 다음을 사용 중입니다 :

public String getSomeTable(final String param1) { 
    String sqlString = "select * from table where name = ?"; 
    Query query = this.getEntityManager().createNativeQuery(sqlString); 

    if(param1 == null) 
     query.setParameter(1, "%%"); 
    else 
     query.setParameter(1, "%param1%"); 
} 

그러나 이것은 확장 가능하지 않습니다. 정수, 날짜 등과 같은 데이터 유형이 있습니다. null 인 경우 해당 매개 변수를 검사하지 않고 건너 뛸 수있는 방법이 있는지 알고 싶습니다.

나는 COALESCE (?, CASE WHEN? = ''THEN 'ELSE'%? % ')를 사용할 계획 이었지만 생각 하나? 특정 매개 변수에 대해 한 번만 사용할 수 있습니다. 다음에 쓰는 것은> 두 번째 매개 변수에 연결됩니다. SQL 서버에

+1

가능한 복제 ([SQL 쿼리 파라미터가 null의 모두 선택하는 경우] http://stackoverflow.com/ 질문/13474207/sql-query-if-parameter-is-null-select-all) – Julian

+0

테이블에서 null 열 값을 허용합니까? 그렇다면 질의를 다음과 같이 변경해야합니다. select * from table where name is null –

+0

어떤 DB를 사용하고 있습니까? – Julian

답변

0

, 나는 이런 식으로 뭔가를 사용, 아마 당신은 포스트 그레스로 번역 할 수 있습니다 :

DECLARE @variable INT = NULL; 

SELECT * 
FROM sysobjects 
WHERE 
(1 = CASE WHEN @variable IS NULL THEN 1 ELSE 2 END) 
OR 
(id LIKE @variable); 
+0

간단하지 않은 이유는 무엇입니까?'@ 변수가 NULL이거나 변수가 @ 변수입니까? – Shnugo

+0

@Shnugo - 아니면 더 간단합니다 :'WHERE id = COALESCE (@ variable, id)'? – Nicarus

+0

이것이 제 첫 번째 아이디어였습니다. 더 간단한 아이디어가 있습니다. – udog