안녕하세요..
수파베이스 데이터베이스에서 아래의 함수를 만들었습니다.
ㅁ 함수 기능
ㅇ 인자 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;
and users."regionProvince" != ''
이 조건이 필요한가요?
그냥 이 조건 빼시면 될 것 같은데요.
오라클에서는 동작하지 않는 조건입니다.
MSSQL, MySQL 에서는 동작 가능한 조건입니다.
수파베이스에서는 어찌 동작될 지 모르겠네요?
일단 불필요한 조건으로 보입니다.
마농님의 의견 처럼 구문을 빼고 or 절 전체를 빼도 해당 조건에서는 레코드를 가져오지를 못하네요...
호출 시 userprovince 파라미터 값이 없을 경우, 쿼리문에서 파라미터 값이 없는 조건을 사용할려면 어떻게 해야 하나요?
null, '' 모두 원하는 결과값을 모두 가져오지 못하네요...
>> or (userprovince is null and users."regionProvince" != '')
>> or (userprovince is '' and users."regionProvince" != '')
의견 주시셔 감사드리며, 추가 의견 주시면 감사하겠습니다.
and users."regionProvince" != '' -- 이 조건 필요한 건가요?
-- 필요 없으면 빼시는게 좋습니다.
userprovince IS NULL -- 이 조건이 안먹히면
userprovince = '' -- 이렇게 해보세요.
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" <> '' )
)
혹시?
해당 테이블에 userprovince 라는 컬럼이 있는 것은 아닌지?
변수명과 컬럼명이 같으면 userprovince 은 컬럼명으로 인식됩니다.
컬럼명과 구별되도록 변수명을 p_userprovince, v_userprovince 등으로 사용하는 것을 권장합니다.
userprovince 컬럼명은 없습니다.
감사합니다.
조인 되는 테이블도 확인한거죠?
혹시?
userprovince 에 공백값(' ')이 들어 오는 것은 아닐런지?
답변이 늦어서 죄송합니다...
콤보박스에서 값을 선택하는 것인데 여러 방법을 시도해봐도 안 돼서,
콤보박스에 전체 선택항목을 만들어서 전체 선택 시 모두를 검색하도록 조치하였습니다.
여러번 답변 주셔서 감사드립니다.
감사합니다.