수파베이스에서 파라미터 조건에 따른 검색을 다른게 할려면 0 9 5,362

by knlim [PL/SQL] 파라미터 수파베이스 조건 검색 [2024.04.04 15:18:04]


안녕하세요..

수파베이스 데이터베이스에서 아래의 함수를 만들었습니다.

ㅁ 함수 기능

 ㅇ 인자 userprovince를 받아서

  - 인자 값이 있으면 users 테이블에서 regionProvince 값이 userprovince와 동일한 값을 가져오고

  - 인자 값이 없으면 users 테이블에서 regionProvince 값 상관 없이 전체 값을 가져옴 


ㅁ 문의사항
 ㅇ 아래 where 조건문과 같이 userprovince is not null인 경우 해당 검색 수행를 수행하나,
   - userprovince is null 조건의 경우 실행이 안 되고 있음

   - userprovince = '' 이 조건으로 해도 실행이 안 됨
  
  >> 함수 호출 시 해당 파라미터의 값이 없을 경우 어떻게 조건문을 작성해야 하나요?

 

고수님들 답변 주시면 감사하겠습니다.

 

create

or replace function gamerank (  userprovince varchar,   usergugun varchar) returns

table (

  regionProvince varchar,

  regionGuGun varchar,

) as $$

begin

return query

select

  users."regionProvince" as regionProvince,

  users."regionGuGun" as regionGuGun,

from

  users

  join "MathRecord" gmr on users.id = gmr.userid

where gameid = 1
and
 (

  (userprovince is not null and users."regionProvince" = userprovince)

  or

  (userprovince is null and users."regionProvince" != '')

)

;

end;

$$ language plpgsql;

by 마농 [2024.04.04 16:09:49]

and users."regionProvince" != ''
이 조건이 필요한가요?
그냥 이 조건 빼시면 될 것 같은데요.

오라클에서는 동작하지 않는 조건입니다.
MSSQL, MySQL 에서는 동작 가능한 조건입니다.
수파베이스에서는 어찌 동작될 지 모르겠네요?
일단 불필요한 조건으로 보입니다.


by knlim [2024.04.04 16:46:15]

마농님의 의견 처럼 구문을 빼고 or 절 전체를 빼도 해당 조건에서는 레코드를 가져오지를 못하네요...

호출 시 userprovince 파라미터 값이 없을 경우, 쿼리문에서 파라미터 값이 없는 조건을 사용할려면 어떻게 해야 하나요?

null, '' 모두 원하는 결과값을 모두 가져오지 못하네요...

  >> or (userprovince is null and users."regionProvince" != '')

  >> or (userprovince is ''  and users."regionProvince" != '')

의견 주시셔 감사드리며, 추가 의견 주시면 감사하겠습니다.

 

 


by 마농 [2024.04.04 16:57:17]

and users."regionProvince" != '' -- 이 조건 필요한 건가요?
-- 필요 없으면 빼시는게 좋습니다.

userprovince IS NULL -- 이 조건이 안먹히면
userprovince = ''    -- 이렇게 해보세요.


by knlim [2024.04.04 17:07:48]

 

 

 

not null인 경우는 해당 조건에 맞게 가져오는데,

아래와 같이 is null,   = ''  조건으로 할 경우는 원하는 결과값을 못가져오네요...

답변 주셔서 감사드립니다.

 

and (

  (userprovince is not null and users."regionProvince" = userprovince)

  or

  (userprovince =  '')

)

 

==============================================================

 

and (

  (userprovince is not null and users."regionProvince" = userprovince)

  or

  (userprovince is null)

)

 

==============================================================

 

and (

  (userprovince is not null and users."regionProvince" = userprovince)

)

 

==============================================================

 

참고로 이렇게 해보면은 전체 레코드를 가져옵니다.

and (

  (userprovince is not null and users."regionProvince" <> '' )

)


by 마농 [2024.04.04 17:20:41]

혹시?
해당 테이블에 userprovince 라는 컬럼이 있는 것은 아닌지?
변수명과 컬럼명이 같으면 userprovince 은 컬럼명으로 인식됩니다.
컬럼명과 구별되도록 변수명을 p_userprovince, v_userprovince 등으로 사용하는 것을 권장합니다.


by knlim [2024.04.04 17:26:58]

userprovince 컬럼명은 없습니다.

 

감사합니다.


by 마농 [2024.04.04 17:33:08]

조인 되는 테이블도 확인한거죠?


by 마농 [2024.04.04 17:31:10]

혹시?
userprovince 에 공백값(' ')이 들어 오는 것은 아닐런지?


by knlim [2024.04.07 17:31:58]

답변이 늦어서 죄송합니다...

콤보박스에서 값을 선택하는 것인데 여러 방법을 시도해봐도 안 돼서, 

콤보박스에 전체 선택항목을 만들어서 전체 선택 시 모두를 검색하도록 조치하였습니다.

여러번 답변 주셔서 감사드립니다.

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입