일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- DB
- script
- href
- 속성
- javascript
- split
- checked
- JSTL
- insert
- Table
- DELETE
- substring
- jQuery
- 마우스
- 광명
- truncate
- Display
- 실행막기
- SHOW
- sql
- Radio
- 칼럼
- mouseout
- hide
- substr
- 이벤트 함수
- 문자열
- forEach.
- 스크립트
- 길이제한
- Today
- Total
홈페이지 제작 전문 업체 Infovider 光明
[서버오류]500에러 subquery expected to return a scalar value but returned multiple rows 문제 해결 본문
[서버오류]500에러 subquery expected to return a scalar value but returned multiple rows 문제 해결
GuruMaster 慧月 2013. 7. 11. 18:23subquery expected to return a scalar value but returned multiple rows라는 메세지를 토해내며 페이지를 보여주지 않는 서버;;;
문제가 되는 sql구문을 지정하고 있어서 얼른 찾아가보니;;;; 한 구문의 길이가 몇 줄도 아니고 몇 페이지다;;;;
그래서 일단 복사해서 하나하나 분리해서 확인해보니
decode함수에서 저 에러 메세지를 토해내고 있습니다.
처음에는 에러메세지의 multiple rows의 뜻을 오해해서 해멧다. 잘되던 decode가 당연히 여러 row를 소화해야지 왜 갑자기 안되는지 ㅜㅠ
각설하고 문제를 해결해놓고 보니 어이없다. 아래 쿼리가 문제가 되는 부분입니다.
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함수는 용법이
decode(칼럼, [검색값, 결과값], 기본값)
입니다.
subquery expected to return a scalar value but returned multiple rows
이 에러메세지의 multiple rows라는 대목을 저는 서브쿼리에서 반환된 결과값이 multiple rows여서 오류인 것으로 오해했던 것입니다.
그런데, 제가 사용했던 쿼리에서 member_id = a.member_id 항목이 있는데, 값을 가지고 있는 a테이블의 값을 가지고 참조하고자 하는 테이블(table_member)의 member_id로 비교 하고자 하자면, 1:N비교가 되어야 합니다. 그런데, table_member에 있는 member_id가 PK인데도 불구하고 최근 몇달간 몇몇 케이스에서 중복이 되고 있어서 위와 같은 오류메세지를 낸 것입니다.
정리하자면, 서브쿼리 결과 중에 단일값으로 예상되는 부분이 중복값을 가지고(보여주고, 반환하고) 있다라는 메세지로 생각해야 할 듯 합니다.
영어가 짧은 거겠죠.ㅜㅠ
|
'프로그래밍 for server' 카테고리의 다른 글
[DB]sql에서 sum함수, count함수 사용법 (0) | 2013.07.17 |
---|---|
[DB]오라클 decode함수 사용법 (0) | 2013.07.16 |
500 Internal Server Error (Error:28) (0) | 2013.07.15 |
HPUX 용량 확인 (0) | 2013.07.12 |
Tibero, Oracle에서 SQL 테이블 복사 (0) | 2013.07.10 |