본문 바로가기

프로그래밍/ORACLE

(5)
[ORACLE] Null 속성 이해 1. Null 값의 연산은 언제나 Null이다 - Null 값은 '공백이나 숫자 0' 과는 전혀 다른 의미 - '아직 정의되지 않은 미지의 값' 또는 '현재 데이터를 입력하지 못하는 경우'를 의미 - 주문 데이터 -주문번호주문금액주문취소금액1100,00020,000215,000 SELECT 주문금액 - 주문취소금액 COL1 , NVL(주문금액 - 주문취소금액, 0) COL2 , NVL(주문금액, 0) - NVL(주문취소금액, 0) COL3 FROM 주문  - SQL 수행 결과 -COL1COL2COL380,00080,00080,000 015,000 2. 집계함수는 Null 값을 제외하고 처리한다(1) SUM- 주문 데이터 -주문번호주문금액주문취소금액1100,000 215,000 340,00..
[ORACLE] LISTAGG 사용하여 여러행을 하나의 컬럼으로 합치기 오늘은 업무를 진행하면서 데이터 추출요청으로 특정기간 고객별 상위 매출 3건의 브랜드를 추출해달라는 요청이 있었습니다. 예전에 MS-SQL를 사용할때 STUFF와 FOR XML PATH를 이용하여 조회했던 기억으로 오라클도 관련 방법을 검색했더니 LISTAGG를 사용하는 방법이 있어서 관련 내용 간단히 작성해봅니다. LISTAGG는 11g부터 사용가능하며 9i는 XMLLOG, 10g는 WM_CONCAT등을 사용하여 처리하여야 합니다. 샘플테이블 회원번호 매출일자 브랜드 1 2022-01-01 샤넬 1 2022-01-03 루이비통 결과 회원번호 브랜드 1 샤넬,루이비통 사용방법 SELECT LISTAGG(브랜드, ',') WITHIN GROUP (ORDER BY 매출일자) OVER (PARTITION BY..
[ORACLE] 반복문(CURSOR, FOR LOOP) 사용법 운영업무를 하다보면 일괄로 반복적으로 처리해야하는 작업이 자주 발생하여 오라클에서 CURSOR, FOR LOOP문 사용법을 정리해 봅니다. 실제로 사용예제만 작성하였으며, 개념 및 내용은 출처를 통해 확인해보면 좋습니다. 1. CURSOR 예제 SET SERVEROUTPUT ON; DECLARE CURSOR emp_cur -- 커서정의 IS SELECT * FROM emp WHERE DEPTNO = 10; emp_rec emp%ROWTYPE; -- 변수정의 BEGIN OPEN emp_cur; LOOP -- 반복 FETCH emp_cur INTO emp_rec; -- 하나씩 변수에 넣기 EXIT WHEN emp_cur%NOTFOUND; -- 더이상 없으면 끝내기 DMBS_OUTPUT.PUT_LINE(emp..
[ORACLE] 테이블정의서 추출 쿼리 현재 데이터베이스에 테이블 정의서가 필요한 경우 아래 쿼리를 사용하면 추출이 가능합니다. WITH LIST AS ( SELECT A.TABLE_NAME, A.COLUMN_NAME, A.DATA_TYPE, A.DATA_LENGTH, A.NULLABLE, B.COMMENTS FROM dba_tab_columns A, all_col_comments B WHERE A.OWNER = B.OWNER AND A.TABLE_NAME = B.TABLE_NAME AND A.COLUMN_NAME = B.COLUMN_NAME AND A.OWNER = 'LOTOSDEV' -- DB명 ), PKLIST AS ( SELECT C.TABLE_NAME, C.COLUMN_NAME, C.POSITION FROM USER_CONS_COLU..
[ORACLE] 조인으로 삭제하기 오라클 조인으로 데이터 삭제하기 샘플입니다. DELETE FROM EMP A WHERE EXISTS ( SELECT 1 FROM DEPT B WHERE A.DEPTNO = B.DEPTNO AND B.DEPTNO = '20' ); DELETE FROM EMP A WHERE A.DEPTNO = ( SELECT B.DEPTNO FROM DEPT B WHERE A.DEPTNO = B.DEPTNO AND B.DEPTNO = '20' ); DELETE FROM EMP A WHERE (A.DEPTNO, A.ENAME) = ( SELECT B.DEPTNO, B.NAME FROM DEPT B WHERE B.DEPTNO = '20' );