db

Oracle single quotation

근 2년간 일을 하면서 가장 많은 문제가 발생되는 부분은 아무래도 연동 쪽이 아닌가 하는 생각이 듭니다. 사용자 정보, 다른 페이지 호출, SSO 등 여러 연계 프로그램이 한 프로세스 안에 동작하거나 혹은 별도의 프로세스로 동작을 합니다.

금일 발생 되었던 문제는 사용자 정보를 가져오는 부분에 Oracle 데이터베이스에서 Select 하는 부분에 문제가 있어 사용자 데이터를 1행도 못 가지고 오는 문제가 발생 되었습니다.

제가 주로 사용하는 데이터베이스인 MySQL로 테스트를 해보면 원하는 결과값이 나오지만 오라클에서만 하면 결과값이 다릅니다.

문제의 원인은 Single Quotation 이었습니다.

  1: Select * from user where userid is not null and userid != ‘’ ;

위의 문장은 단순하게 userid 칼럼의 값이 null 이 아니고 공백도 아닌 사용자를 가져오도록 하는 것입니다. (습관적으로 이렇게 사용을 합니다.)
복잡한 쿼리를 전송 하는게 아니기 때문에 해당 Query 문을 Oracle 에서 실행 했습니다.(단순하게 재연을 위해 가상의 테이블을 생성했습니다.)

  1: CREATE TABLE TEST (
  2:    PHONE VARCHAR(10)
  3: )

모든 데이터를 조회했습니다.

  1: SELECT * FROM TEST;

 

single1

입력되어 있는 데이터는 ‘1000’, null, ‘ ’ 입니다.
그러면 NULL이 아닌 데이터만 조회해보겠습니다.

  1: SELECT * FROM TEST WHERE PHONE IS NOT NULL;

single2

출력된 데이터는 아마 ‘1000’, ‘ ‘ 입니다.

그럼 문제의 Single Quotation 이 포함된 Query 를 요청하겠습니다.

  1: SELECT COUNT(*) FROM TEST WHERE PHONE != ''

 

single3

데이터가 없다고 나옵니다..-_-
해결책은 SingleQuotation 을 다른 SingleQuotation 으로 감싸는 방법입니다.

  1: SELECT COUNT(*) FROM TEST WHERE PHONE != ‘''’

single4

처음에 제한 원한 결과가 출력됩니다.

기본

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중