* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
|
Window7 32bit, Linux 64bit 등 |
|
[cubrid_rel] 수행 결과 |
|
[도움말]-[버전정보] 확인 |
|
java, php, odbc 등 입력 |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
안녕하세요 큐브리드 SQL중 DECODE 사용하다 문의점이 있어서 문의드립니다.
아래 SQL 사용시 DECODE시 해당 테이블의 컬럼으로 DECODE 값을 나타내는 것은 안되는 것이 맞는건가요?
☞ 해당 테이블 정보입니다.
■ msg_log (테이블)
- cont_seq numeric(11,0) (컬럼)
- msg_type numeric(1,0) (컬럼)
- sms_text varchar(160) (컬럼)
■ mms_contents_info (테이블)
- cont_seq numeric(11,0) (컬럼)
- msg_type (numeric(1,0) (컬럼)
- mms_body varchar(2000) (컬럼)
☞ DECODE(mlog.msg_type, 6 , 1, 2) 이런식으로 값을 넣어줄시 가능하지만 해당 컬럼 DECODE(mlog.msg_type, 6 , mms.mms_body, mlog_sms_text) 으로 출력시 안되네요
해당 컬럼으로 DECODE 값 출력시 안되는 것이 맞는것인지?
■ DECODE 사용 SQL
SELECT
DECODE(mlog.msg_type, 6 , mms.mms_body, mlog_sms_text) sms_txt
FROM msg_log mlog
,mms_contents_info mms
WHERE 1=1
AND mlog. cont_seq = mms.cont_seq
;
☞ CASE WHEN 사용시 THEN 뒷부분에 해당하는 컬럼(mms.mms_body) ELSE 에 해당 컬럼mlog.msm_text으로 넣을시 동작이 안되는 것이 맞는건가요?
■ CASE WHEN 사용 SQL
SELECT
CASE WHEN mlog.msg_type = 6 THEN mms.mms_body
ELSE mlog.msm_text
END AS sms_txt
FROM msg_log mlog
,mms_contents_info mms
WHERE 1=1
AND mlog.cont_seq = mms_cont_seq
;
☞ 위에 방법이 안된다고 하면 DECODE나 CASE WHEN 해당 컬럼 넣어서 사용할 수 있는 방법이나 다른 방법이 있다면 알려주시기를 부탁드립니다.
아래는 올려주신 내용을 바탕으로 샘플을 만들어 본 것이고 , 정상 출력됩니다.
DECODE오류가 아닌 올려주신 글 중에 오타(mms_cont_seq -> mms.cont_seq 등)으로 인한 오류가 아닌지요? 이를 점검해 보시기 바랍니다.
-----Test---
drop table msg_log;
create table msg_log
(id int
,cont_seq numeric(11,0)
,msg_type numeric(1,0)
,sms_text varchar(160)
);
insert into msg_log values(1,15,5,'(1_text)CUBRID');
insert into msg_log values(2,15,6,'(2_text)CUBRID');
drop table mms_contents_info;
create table mms_contents_info
(id int
,cont_seq numeric(11,0)
,msg_type numeric(1,0)
,mms_body varchar(2000)
);
insert into mms_contents_info values(10,11111,1,'Be ambitious');
insert into mms_contents_info values(20,22222,0,'an old friend');
insert into mms_contents_info values(1,15,1,'(body)IS KING');
수행 결과1)
select mms.cont_seq,
mlog.msg_type,
DECODE(mlog.msg_type, 6 , mms.mms_body, mlog.sms_text) sms_text
from msg_log mlog, mms_contents_info mms
where 1=1
AND mlog.cont_seq = mms.cont_seq
=== <Result of SELECT Command in Line 6> ===
cont_seq msg_type sms_text
==================================================================
15 5 '(1_text)CUBRID'
15 6 '(body)IS KING'
수행결과2)
SELECT
CASE WHEN mlog.msg_type = 6 THEN mms.mms_body
ELSE mlog.sms_text
END AS sms_txt
FROM msg_log mlog
,mms_contents_info mms
WHERE 1=1
AND mlog.cont_seq = mms.cont_seq
sms_txt
======================
'(1_text)CUBRID'
'(body)IS KING'
감사합니다.