ORACLE

참조사이트

  • https://docs.oracle.com/en/database/index.html
  • https://docs.oracle.com/en/database/oracle/oracle-database/12.2/
  • https://livesql.oracle.com/apex/f?p=590:49:0::NO:RP,49:P49_TYPES:T
  • listagg
  • start by connect by

  • 요일명 한글로
  1. NLS_LANG 변경
    a. 확인 client : REGEDIT -> HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE -> KEY_XE -> NLS_LANG -> KOREAN_KOREA.KO16MSWIN949
    server : sql>show parameter NLS b. NLS_LANG 파라미터 설정

  2. TO_CHAR() 3번째 인수 추가 to_char(current_date, ‘DY’, ‘NLS_DATE_LANGUAGE=KOREAN’)

  • sum over
    • sum(누적할 컬럼명) over(partition by 그룹화할 컬럼명 order by 정렬할 컬럼명 정렬 방식)
select department_id,
       employee_id,
       salary,
       sum(salary) over ( order by department_id, employee_id) as "누적합계",
       sum(salary) over (partition by department_id order by  employee_id) as "부서별누적",
       sum(salary) over ( ) as "전체급여"
 from employees
order by department_id
select *
  from (select department_id,
               count(*) cnt,
               sum(salary) sal
          from employees
         where department_id is not null
         group by department_id )
unpivot ( value for col in (cnt, sal)  )
  • insert all
insert all into 테이블명(컬럼리스트) values ( 값리스트 )
           into 테이블명(컬럼리스트) values ( 값리스트 )

pivot

  • 피봇 대상 테이블을 인라인 뷰로 정의한 후 피봇 하고 그 결과를 출력.
  • 집계 함수는 회전한 후 각 칸에 쓸 값을 지정.
  • 피봇의 FOR 절은 대상 칼럼, IN 절은 그 칼럼에서 열로 만들 값의 목록.
  • 필드 값을 따옴표 안에 작성
SELECT *
  FROM ( SELECT  department_id 
               , salary 
               , JOB_ID
           FROM  employees)
 PIVOT ( SUM(salary) AS 합계 
         FOR department_id
          IN( '10','20','30','40' )
        )
 ORDER BY JOB_ID ;
SELECT * 
  FROM ( 피벗  쿼리문 )
 PIVOT ( 그룹함수(칼럼)
        FOR 피벗할 칼럼
         IN (항목1, 항목2, 항목3 ...)
      )
 ORDER BY 그룹핑할 컬럼 ;

동적으로 IN 절 항목을 넣으려면 java 단에서 pivot in 절 안의 값을 텍스트로 받아서 처리

execute immediate

create procedure __
begin
   execute immediate 'create user ' || id || ' identified by ' || pw;
end;

Categories:

Updated: