안녕하세요. 매일 좋은 정보를 얻어가다가 처음으로 글을 올리게 되었습니다.
제가 맡은 사이트에서 특정 페이지가 갑자기 통채로 500에러를 토해냈습니다.
핵심원인으로 아래 메세지를 지목했습니다.
--- Cause: com.tmax.tibero.jdbc.TbSQLException: subquery expected to return a scalar value but returned multiple rows
이를 바탕으로 추적해 들어가니
decode()함수 부분에서 위의 오류메세지를 토해냈습니다.
그런데, 문제는 이게 원래 잘 돌아가던 쿼리였다는 것입니다.
7월이후로 이문제가 있었던 것 같은데, 제가 다른 업무로 정신못쓰는 사이 뻗어버린 것 같았습니다.
좀 더 상세 부연하자면,(해당 쿼리가 너무 길어 문제있는 부분만 요약 추출했습니다.수식관련 부분이라 쿼리한줄이 몇 페이지를 넘어가서;;;)
아래 쿼리가 문제가 되는 부분입니다.
select decode((select member_gubun from table_member where member_id = a.member_id),'GUBUN01', a.money, 0 ) alias_money from table_donate a;
쉽게 설명해서 어떤 기금에 멤버들이 주기적 혹은 일시적으로 입금을 한 자료에서 멤버종류별로 합을 구하기 위한 쿼리입니다.
원래는 decode함수 바깥에 sum()함수로 감싸두어 decode()함수로 리턴된 테이블의 합을 구했던 구문이었습니다.
그런데 decode함수가 실제로 테이블을 리턴할 수 있다고 알고 있고, 그렇게 해야 sum함수를 사용할 수 있을 텐데 도무지 답이 안보입니다.
정리하자면
1. 원래 되던 구문이 안된다.
2. 같은 decode함수를 전체 구문 내에서 20여개가 들어있는데 위의 10여개는 잘 동작하는데 이구문에서 뻗는다.
3. 시스템은 tibero3입니다.
혹시 아시는 분 있으시면 부탁드립니다. ㅜㅠ
감사합니다.