[Oracle] 오라클 순번 매기기 (행, 그룹별 순번) / ROWNUM, ROW_NUMBER()
·
DataBase/Oracle
오라클에서 행에 순번을 부여하는 방법 중 가장 기본적인 2가지를 알려 드리겠습니다. ROWNUM 사용 방법 (정렬 미적용)SELECT ROWNUM , A.* FROM EMP A WHERE JOB IN ('MANAGER','CLERK','ANALYST')ROWNUM을 선언하면 해당 테이블의 행 적제 순서대로 행 번호가 순번으로 부여ORDER BY로 정렬하기 전에 순번이 부여ROWNUM 사용 방법 (정렬 적용)SELECT ROWNUM , A.* FROM ( SELECT * FROM EMP WHERE JOB IN ('MANAGER','CLERK','ANALYST') ORDER BY SAL ) A사용자가 임의로 정렬한 순서대로 순번 ..
[Oracle] 오라클 COUNT OVER 사용 방법 / 그룹별 중복 행(값) 찾기
·
DataBase/Oracle
COUNT와 OVER를 같이 사용하면 GROUP BY 로 그룹화하지 않아도 건수 집계 및 분석이 가능합니다.COUNT만 사용하는 경우 GROUP BY 사용COUNT() OVER() 로 사용하는 경우 GROUP BY 없이 사용전체 행의 개수 구하기 / 조건 부여SELECT EMPNO , ENAME , JOB , SAL , DEPTNO , COUNT(*) OVER() AS TOT_CNT , COUNT(CASE WHEN SAL >= 2000 THEN EMPNO END) OVER() AS CNT_2000 FROM EMP WHERE JOB IN ('MANAGER','CLERK','ANALYST')OVER() 안을 공란으로 두면 전체 행의 개수 집계COUNT()..
[Oracle] 오라클 초를 분(MI), 시간(HH), 일(DD)로 변환하기
·
DataBase/Oracle
초 단위로만 집계된 데이터를 분 / 시간 / 일 단위로 변환하는 방법을 알려 드리겠습니다.초단위 변환SELECT 86400 AS 초 , FLOOR(86400 / 60 ) AS 분 , FLOOR(86400 / (60 * 60) ) AS 시간 , FLOOR(86400 / (60 * 60 * 24) ) AS 일 FROM DUALFLOOR 함수로 소수점 이하를 내림처리 하여 변환 가능합니다.같은 원리로 TRUNC 함수로 소수점 이하를 버림 처리하여 변환 가능합니다.분, 시간, 일 을 따로 곱하면 상세한 계산을 쉽게 처리할 수 있습니다.초단위 집계 SSSSS 활용 방법SELECT SYSDATE , TO_C..
[Oracle] 오라클 ORA-04091 "테이블이 변경되어, 트리거/함수가 볼 수 없습니다" 오류 해결 방법 / "table is mutating, Trigger/Fuction may not see it"
·
DataBase/Oracle Error
원인ORA-04091 오류는 트리거가 참조하고 있는 테이블의 변경 사항이 확정되지 않은 상태에서 동일한 테이블을 다시 참조하려고 할 때, 데이터 일관성을 보장하기 위해 발생대부분 행 수준 트리거(Row-Level Trigger)에서 발생트리거에서 참조하는 테이블과 동일한 테이블을 DML(SELECT, UPDATE, DELETE, INSERT) 하여 접근하는 경우트리거가 직접 또는 간접적으로 다시 호출(재귀 호출)되어 동일한 테이블을 접근하는 경우위의 경우 변경된 내용을 다시 트리거가 참조하게 되어 무한 루프가 발생하기 때문에 오라클이 오류가 발생시킵니다. 해결 방법트리거를 문장 수준 트리거(Statement-Level Trigger)로 변경CREATE OR REPLACE TRIGGER STATEMENT_..
[Oracle] 오라클 ORA-04092 "트리거 안에 COMMIT를 할 수 없습니다" 오류 해결 방법
·
DataBase/Oracle Error
ORA-04092: 트리거 안에 COMMIT를 할 수 없습니다. / 트리거 안에 ROLLBACK을 할 수 없습니다. 위와 같은 오류가 발생하는 경우 해결하는 방법을 알려 드리겠습니다. 원인트리거(TRIGGER) 는 오류가 있으면 ROLLBACK, 오류가 없으면 COMMIT 이 자동으로 처리즉, 트리거 적용 시 AUTO COMMIT 수행되고 있으니 COMMIT / ROLLBACK 명령어가 필요 없다.COMMIT 이나 ROLLBACK 필요 없으므로 삭제해결 방법COMMIT 이나 ROLLBACK이 명령어 삭제 (권장)트리거 내부에서 프로시저를 호출하는 경우 해당 프로시저 안에 있는 COMMIT, ROLLBACK 명령어도 삭제트리거 내에 AUTO COMMIT 해제 기능 추가 (코드가 너무 복잡해서 수정 불가능한..
[Oracle] 오라클 MERGE INTO 개념 및 사용 방법 / UPDATE, INSERT 동시에 수행 (UPSERT)
·
DataBase/Oracle
처리할 데이터 양이 많은데 UPDATE와 INSERT를 구분해서 수행해야 하는 경우UPDATE와 INSERT를 한 번에 수행할 수 있는 MERGE INTO 에 대해 알려 드리겠습니다. MERGE INTO 기본 사용 방법단일 테이블 또는 조건 사용 (DUAL)MERGE INTO DEPT A USING DUAL ON (A.DEPTNO = '50') WHEN MATCHED THEN UPDATE SET A.DNAME = 'PRODUCTIONS' , A.LOCATION = 'BUSAN' WHEN NOT MATCHED THEN INSERT (A.DEPTNO, A.DNAME, A.LOCATION) VALUES..