Oracle DECODE 함수 문법 사용 안내

3571 단어 Oacledecode
Oracle DECODE 함수 기능 이 매우 강 합 니 다.다음은 Oracle DECODE 함수 의 용법 을 상세 하 게 소개 합 니 다.Oracle DECODE 함수 에 대해 더 많이 알 수 있 기 를 바 랍 니 다.Oracle DECODE 함수 Oracle DECODE 함 수 는 Oracle 회사 가 독점 적 으로 제공 하 는 기능 으로 기능 이 강 한 함수 입 니 다.그것 은 SQL 의 표준 은 아니 지만 성능 에 매우 유용 하 다.현재 다른 데이터베이스 공급 업 체 들 은 DECODE 와 유사 한 기능 을 제공 하지 못 하고 있 으 며,심지어 일부 데이터베이스 공급 업 체 들 은 Oracle 의 SQL 이 표준 이 아니 라 고 비판 하고 있다.실제로 이런 비판 은 단편 적 이거 나 수준 이 부족 하 다.어떤 마차 제조 사 들 이 헨리 를 불평 하 는 것 같다.포드 의 마 차 는 표준 이 다르다.1 DECODE 의 if-then-else 논 리 는 논리 프로 그래 밍 에서 If C Then CElse 를 사용 하여 논리 적 판단 을 한다.DECODE 의 문법 에 서 는 사실상 이러한 논리 적 처리 과정 이다.그것 의 문법 은 다음 과 같다.DECODE(value,if1,then 1,if2,then 2,if3,then 3,...else)Value 는 특정한 표 의 모든 유형의 임 의 열 이나 계산 을 통 해 얻 은 모든 결 과 를 대표 한다.모든 value 값 이 테스트 되 었 을 때 value 의 값 이 if1 이면 Decode 함수 의 결 과 는 then 1 입 니 다.value 가 if2 와 같 으 면 Decode 함수 결 과 는 then 2 입 니 다.잠깐 만.사실 여러 개의 if/then 짝 짓 기 를 할 수 있 습 니 다.value 결과 가 주어진 짝 짓 기 와 같 지 않 을 때 Decode 결 과 는 else 로 돌아 갑 니 다.주의해 야 할 것 은,이곳 의 if,then 및 else 는 모두 함수 나 계산 표현 식 일 수 있다 는 것 이다.DECODE(조건,값 1,번역 값 1,값 2,번역 값 2,...값 n,번역 값 n,결 성 값)이 함수 의 의 미 는 다음 과 같다.IF 조건=값 1 THEN RETURN(번역 값 1)ELSIF 조건=값 2 THEN RETURN(번역 값 2)...ELSIF 조건=값 n THEN RETURN(번역 값 n)ELSE RETURN(결 성 값)END IF 2 DECODE 의 간단 한 예 Oracle 시스템 에서 많은 데이터 사전 이 decode 사상 으로 디자인 되 었 다.예 를 들 어 세 션 정 보 를 기록 하 는 V$SESSION 데이터 사전 보기 가 이 렇 습 니 다.저 희 는'Oracle 8i/9i Reference'자료 에서 알 수 있 듯 이 사용자 가 로그 인 에 성공 하면 V$SESSION 에 해당 하 는 기록 이 있 지만 사용자 가 진행 하 는 명령 동작 은 이 보기에 서 명령 의 코드 만 기록 합 니 다(0-아무런 조작 도 없 음,2-Insert...).구체 적 인 명령 키워드 가 아 닙 니 다.따라서 우 리 는 현재 각 사용자 의 이름과 그들 이 진행 하 는 조작 을 알 아야 할 때 아래 명령 을 사용 해 야 상세 한 결 과 를 얻 을 수 있다
 
select sid,serial#,username,
DECODE(command,
0,'None',
2,'Insert',
3,'Select',
6,'Update',
7,'Delete',
8,'Drop',
‘Other') cmmand
from v$session where username is not null;
3 DECODE 실현 표 의 전환 데이터베이스 에 있 는 표 는 열 과 줄 로 구 성 된 2 차원 표 이다.일반적으로 모든 데이터 베이스 에 열 거 된 것 은 유한 한 수량 이 고 행 의 변화 가 비교적 크 며 표 가 크 면 행 의 수량 이 천만 줄 이 넘 을 수 있다.같은 열 에 동행 하지 않 으 면 값 이 다 를 수 있 으 며 미리 정 의 된 것 이 아 닙 니 다.예:주택 적립금 보고서 교체 사례:1.각 단위 가 현지 취급 은행 에서 계 좌 를 개설 하고 계 좌 를 개설 하 는 것 은 단위 의 기본 정보 와 직원 정 보 를 등록 하 는 것 이다.2.매달 각 부서 의 회계 가 취급 은행 에 가서 본 회사 의 모든 직원 의 주택 적립금 을 납부 하고 시스템 은 모든 직원 의 납부 내 역 을 기록 하 며 각 기록 에 취급 은행 의 코드 를 기록한다.3.매달,계절,반년 및 연말 에 모두 취급 은행 을'열'로 바 꾸 어 한 달 간 의 명세 보고 서 를 제출 하도록 요구한다.취급 은행:성서 구 성동 구 월:2001.01 xxxx 1.xx xxxx x2.xx 2001.02 xxxx 3.xx xxxx 4.xx...원래 의 데이터 순 서 는 성서 구 2001.01 xxxx x1.xx 성동 구 2001.01 xxxx x2.xx 성서 구 2001.02 xxxx 3.xx 성동 구 2001.02 xxxx x4.xx 주택 적립금 시스템 기록 직원 의 매달 납부 명세 의 paylst 표 구 조 는:bankcode varchar 2(6)NOT NULL,--취급 행 코드 accno varchar 2(15)not null,--단위 코드(단위 계 정)empacc_no varchar 2(20)not null,--직원 계 정 trandate date not null,--납부 날짜 tranval Number(7,2)not null,--납부 액 sysdate date default sysdate,--시스템 날짜 operid varchar 2(10)-운영 자 코드 와 같은 표 구 조 는 일반적으로 취급 행 을 행(row)으로 통계 하 는 것 이 쉽 지만 취급 행 을 열(column)과 같은 형식 으로 출력 하 기 를 원한 다 면 어려움 이 있 습 니 다.DECODE 함수 로 처리 하면 간단 합 니 다.현재 pay 에 대한 보 기 를 만 듭 니 다.lst 표 조회.취급 행 코드 를 구체 적 인 취급 행 이름 으로 바 꾸 면 됩 니 다
 
CREATE OR REPLACE VIEW bank_date_lst AS
Select to_char(tran_date,'yyyy.mm'),
SUM( DECODE ( bank_code,'001', tran_val,0 )) ,
SUM( DECODE ( bank_code,'002', tran_val,0 )) ,
SUM( DECODE ( bank_code,'003', tran_val,0 ))
FROM pay_lst
GROUP BY to_char(tran_date,'yyyy.mm');
보 기 를 만 든 후 이 보 기 를 직접 조회 하면 열 에 따라 결 과 를 표시 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기