728x90
▨ 소계 & 총계 구하는 SQL (ROLLUP)
-- 다음의 [1][2][3]은 동일한 결과를 보여준다.

[1] rollup 이용
select decode(grouping(d.dname), 1, '총계',d.dname) dept,
         decode(grouping(t.job),       1, '계',    t.job)       job,
         nvl(sum(t.sal),0)         salary
  from dept d, emp t
 where t.deptno = d.deptno
 group by rollup(d.dname, t.job)
 order by 1,2;
 
[2] COPY_T 대신 무한로우 생성 쿼리를 이용
select decode(no,1,trim(d.dname),2,trim(d.dname),'총계') dept,
         decode(no,1,trim(t.job),                             '계')    job,
         nvl(sum(t.sal),0) salary
  from (select level no from dual connect by level <= 3), dept d, emp t
 where t.deptno = d.deptno
 group by decode(no,1,trim(d.dname),2,trim(d.dname),'총계'),
              decode(no,1,trim(t.job),                             '계')
 order by 1,2;
 
[3] 가장 접근하기 쉬운 무식한 방법
select d.dname dept, t.job job, nvl(sum(t.sal),0) salary
  from dept d, emp t
 where t.deptno = d.deptno
 group by d.dname, t.job
union all
select d.dname dept, '계' job, nvl(sum(t.sal),0) salary
  from dept d, emp t
 where t.deptno = d.deptno
 group by d.dname
union all
select '총계' dept, '계' job, nvl(sum(t.sal),0) salary
  from emp t
 order by 1,2;
 
▶ 결과
DEPT             JOB             SALARY
----------------------------------
ACCOUNTING CLERK         1300
ACCOUNTING MANAGER    2450
ACCOUNTING PRESIDENT   5000
ACCOUNTING 계                8750
RESEARCH    ANALYST      6000
RESEARCH    CLERK         1900
RESEARCH    MANAGER    2975
RESEARCH    계                10875
SALES          CLERK          950
SALES          MANAGER     2850
SALES          SALESMAN   5600
SALES          계                9400
총계              계                29025
 
 

▨ 각 항목별 소계 & 총계 구하는 SQL (CUBE)
-- 다음의 [1][2][3]은 동일한 결과를 보여준다.
 
[1] cube 이용
select decode(grouping(d.dname), 1, '총계',d.dname) dept,
         decode(grouping(t.job),       1, '계',    t.job)      job,
         nvl(sum(t.sal),0) salary
  from dept d, emp t
 where t.deptno = d.deptno
 group by cube(d.dname, t.job)
 order by 1,2;
 
[2] COPY_T 대신 무한로우 생성 쿼리를 이용
select decode(no,1,trim(d.dname),2,trim(d.dname),'총계') dept,
         decode(no,1,trim(t.job),      3,trim(t.job),      '계')     job,
         nvl(sum(t.sal),0) salary
  from (select level no from dual connect by level <= 4), dept d, emp t
 where t.deptno = d.deptno
 group by decode(no,1,trim(d.dname),2,trim(d.dname),'총계'),
              decode(no,1,trim(t.job),  3,trim(t.job),          '계')
 order by 1,2;
 
[3] 가장 접근하기 쉬운 무식한 방법
select d.dname dept, t.job, nvl(sum(t.sal),0) salary
  from dept d, emp t
 where t.deptno = d.deptno
 group by d.dname, t.job
union all
select d.dname dept, '계' job, nvl(sum(t.sal),0) salary
  from dept d, emp t
 where t.deptno = d.deptno
 group by d.dname
union all
select '총계' dept, t.job, nvl(sum(t.sal),0) salary
  from dept d, emp t
 where t.deptno = d.deptno
 group by t.job
 order by 1,2;
 
▶ 결과
DEPT             JOB             SALARY
----------------------------------
ACCOUNTING CLERK         1300
ACCOUNTING MANAGER    2450
ACCOUNTING PRESIDENT   5000
ACCOUNTING 계                8750
RESEARCH    ANALYST      6000
RESEARCH    CLERK         1900
RESEARCH    MANAGER    2975
RESEARCH    계                10875
SALES           CLERK         950
SALES           MANAGER    2850
SALES           SALESMAN   5600
SALES           계                9400
총계              ANALYST      6000
총계              CLERK          4150
총계              MANAGER     8275
총계              PRESIDENT   5000
총계              SALESMAN   5600
총계              계                29025

출처 : http://simmys.tistory.com/category/DataBase/Oracle
728x90

오라클 언어설정 변경

리눅스에 오라클을 설치할 때, 언어를 한국어로 하는 경우 오류가 나는 사례(여러 사이트의 기존 설치자들 의견)가 있다 하여, s2clinux 설치 당시 영어로 설치하였습니다.
정상적으로 Oracle9i database 설치한 이후에, 오라클 데이터베이스에 접속하여 데이터를 한글로 저장하는 경우 한국어 지원이 되지 않으므로, 설치한 후에 언어를 한국어로 변경하는 방법을 설명하고자 합니다.
 
1. 오라클 데이터베이스 문자셋과 언어셋 변경
 
문자셋(CHARACTER SET) 변경
오라클 데이터베이스 관리자로 접속하여 NLS_CHARACTERSET, NCHAR의 CHARACTERSET에 한국어를 지원하도록 파라미터의 속성값을 KO16KSC5601로 변경합니다.

언어셋(LANGUAGE SET) 변경
문자셋과 마찬가지로 오라클 데이터베이스 관리자로 접속하여 NLS_LANGUAGE 파라미터의 속성값을 AMERICAN_AMERICA.KO16KSC5601로 변경한다.

[문자셋 변경]
SQL> update sys.props$

         set value$='KO16KSC5601'

         where name='NLS_CHARACTERSET';  
1 row updated.
  
SQL> update sys.props$

         set value$='KO16KSC5601'

         where name='NLS_NCHAR_CHARACTERSET';
1 row updated.


[언어셋 변경]
SQL> update sys.props$

         set value$='AMERICAN_AMERICA.KO16KSC5601'

         where name='NLS_LANGUAGE';    
1 row updated.

[변경사항 저장 및 데이터베이스 재연동]

SQL> commit;
Commit complete.    

SQL> shutdown
Database closed.    
Database dismounted.    
Oracle instance shut down.  

SQL>startup
ORACLE instance started.
Total System Global Area     235999352 bytes
    
Fixed Size                   450680 bytes    
Variable Size               201326592 bytes    
Database Buffers          33554432 bytes    
Redo Buffers                667648 bytes    
Database mounted.    
Database opened.

[변경사항 확인]
SQL> select *

         from   v$nls_parameters;

2. 오라클 언어 환경변수 변경
오라클을 설치할 때 지정해 주었던 .bash_profile 파일에서 Oracle 언어 환경변수를 다음과 같이 변경해 줍니다.
export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601

출처 : http://simmys.tistory.com/category/DataBase/Oracle
728x90
Oracle Version 보기
SELECT banner FROM  V$VERSION;

'데이터베이스 > 오라클' 카테고리의 다른 글

소계 & 총계 구하는 SQL (ROLLUP)  (0) 2010.08.16
오라클 NLS_LANG 설정변경  (0) 2010.08.16
View, Sequence, Synonym, Index  (0) 2010.08.16
오라클 데이터사전  (0) 2010.08.16
인덱스 저장위치 설정  (0) 2010.08.16

+ Recent posts