본문 바로가기

DATABASE/ORACLE12

[PROCEDURE] 독립적인 트랜잭션 설정 서론 Oracle에서 프로시저를 사용하다가 자꾸 예상하지 못한 부분에서 COMMIT/ROLLBACK 이 처리되었다. 확인해보니까 내부 로직에서 데이터를 적재한 후 로그 테이블에 로그를 쌓기위한 다른 프로시저를 호출하였는데, 그 프로시저에서 COMMIT/ROLLBACK을 실행하고 있었다. 이처럼 프로시저가 하나의 트랜잭션에서 여러 프로시저를 호출하여 사용하는 경우 문제가 발생할 수 있다. 따라서, 각 프로시저마다 독립적인 트랜잭션을 구성할 수 있도록 'PRAGMA AUTONOMOUS_TRANSACTION' 옵션을 적용해야한다. 간단한 예제를 통해 어떻게 적용되는지 알아보도록 하자. 1. 예제 1-1. 요약 1. 데이터를 적재하는 프로시저를 호출. 2. 프로시저가 테이블에 데이터를 INSERT하고 COMMI.. 2020. 7. 23.
[SPOOL] SQL 스크립트를 출력하는 스풀링 서론 Table이나 Procedure, Fuction 등 간혹 백업을 위해서 스크립트를 추출해야 하는 경우가 있는데, 이를 하나씩 조회하고 파일로 저장하다가 귀찮아서 Spool을 이용하여 동적으로 스크립트를 저장할 수 있는 쿼리를 만들어 보았다. 1. 동적 Script 추출 쿼리 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 /** 스크립트 실행 결과 출력 **/ SET FEEDBACK OFF /** 스크립트 검증 **/ SET VERIFY OFF /** 스크립트 명령 출력 **/.. 2020. 4. 24.
[SQL] WITH문을 이용한 계층형쿼리 ( With. CONNECT BY절) 계층형 구조(Hierarchical Structure)는 부모와 자식 간의 관계를 깊이로 구분하여 표현하는 것으로 트리구조, 보통 카테고리를 분류나 조직도에 많이 사용된다. 개발자들이 흔히 사용하는 Visual Studio나 이클립스와 같은 IDE의 Project 탐색기, 폴더의 탐색기에도 사용된다. 일반적으로 RDBMS에서는 행(Row) 단위로 데이터가 조회되어 다른 행과의 관계를 나타내는 계층형 구조를 조회하기 힘들다. 하지만, WITH문을 이용하면 계층형 구조의 데이터를 조회할 수 있다. Oracle은 10g버전부터 CONNECT BY문 을 이용하여 계층형 쿼리를 만들 수 있고, 11g R2 버전부터 Recursive Subquery Factoring 기능이 추가되어 WITH문으로 재귀가 가능하게 .. 2020. 1. 23.
[SQL] WITH문 Query을 작성하다보면 SubQuery를 사용하는 경우가 많다. 한두개만 사용하면 괜찮지만 그 수가 많아질 수록 가독성이 떨어지며, 재사용할 수가 없어서 매번 같은 Query를 작성해줘야 한다. 그래서, 이번 포스트에서는 이 문제점을 해소하는데 도움이 되는 WITH문에 대해서 알아보도록 하겠다. 1. WITH문이란? 1-1. 이름을 가진 SubQuery를 정의한 후 사용하는 구문. 1-2. Query의 전체적인 가독성을 높이고, 재사용할 수 있는 장점이 있음. 1-3. 대부분의 DBMS에서 지원함. 1-4. 계층형쿼리를 구현할 수 있음. - WITH순환절. - 오라클은 11g 버전부터 계층형쿼리를 위한 CONNECT BY절을 지원함. 1-5. 오라클에서는 한번만 사용되면 Inline View, 두번이상.. 2020. 1. 22.