본문 바로가기

Database/Oracle

(8)
[Oracle] 오라클 기본 명령어 #1 데이터 베이스 내 모든 테이블 DELETE 명령어 추출 SELECT 'DELETE FROM "' || TABLE_NAME || '";' FROM user_tables; 데이터 베이스 내 모든 테이블 DROP 명령어 추출 SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;' FROM user_tables; 전체 테이블 DROP 후 시퀀스 삭제 purge recyclebin;
[Oracle] 특정 테이블에 데이터가 없을 시 기본값 출력하기 DB쿼리를 짤때 값이 없을 경우에는 디폴트 값을 보여줘야하는 시나리오가 종종 나오게 된다. 그럴경우에 한번에 초기 테이블을 만들때 다음과 같은 방법으로 해볼 수 있다. 아래의 테이블 내용은 STR_ID 별로 물품 카테고리와 물품들 리스트를 보관하는 테이블의 데이터 모습이다. 여기서 특정 STD_ID에 해당하는 카테고리/물품 내용이 저장되어 있지 않을 경우 디폴트 STR_ID = 0인 값들로 무언가 해보고자 한다면 과연 어떻게 초기 테이블을 가져갈 수 있을까? UNION ALL을 활용해 값이 없을때의 STR_ID = 0 인 조회결과와 실제 원하는 값이 있을때의 테이블 결과를 UNION ALL 하면 위 시나리오 대로 실행을 해볼 수 있다. 아래와 같이 조회를 원하고자 하는 STR_ID = 3에 해당하는 값이..
[Oracle] first_value 함수 사용하기 오라클로 DB개발시 특히 집계 결과를 생성시에 최소값 또는 최대값을 기준으로 편차를 계산하는 등의 작업이 필요할 때가 있다. 오라클의 first_value 함수를 사용하면 특정 집단내의 기준값을 찾고 그 기준으로 결과를 뽑아내기가 쉬워진다. 정의는 다음과 같다. FIRST_VALUE (expr [ IGNORE NULLS ]) OVER (analytic_clause) 다음과 같이 간단한 데이터 테이블이 있다고 가정하자.... 카테고리별로 물품이 있고 각 물품은 가격을 가지고 있다. 각 물건의 가격을 전체 집단의 최저가격 대비 얼마만큼 차이가 있는지 쉽게 알수 있는 방법은 뭘까? 예제1. 각 카테고리별로 최저값을 구하고 각 카테고리별로 모든 물품의 최저값과의 차이를 구해라 SELECT CATEGORY, PR..
[Oracle] 파티션 별 순번 매기기 ROW_NUMBER 테이블 쿼리를 한 후 순번을 매기는 경우가 있다. 예를 들어 판매량별로 우선순위를 매기고 이를 순번으로 기록해 두면 추후에 특정 등수 이상 또는 이하의 레코드를 추출할 떄 해당 컬럼을 활용하여 쉽게 추출할 수 있다. ROW_NUMBER 문법 스펙은 다음과 같다. ROW_NUMBER( ) OVER ([ query_partition_clause ] order_by_clause) 예제1) 아래 쿼리는 employees 테이블에서 department_id 별로 salary 액수기준 내림차순으로 정렬한 후 rn(row_number)가 3 이하인 레코드를 추출한다. SELECT department_id, first_name, last_name, salary FROM ( SELECT department_id, fir..
[Oracle] Insert, Update 판단을 한번에... Merge into 구문 살펴보기 서버 개발을 하면 주기적으로 갱신되거나 신규 유입되는 데이터의 경우에 DB에 해당 Key를 가진 레코드를 확인해보고 있으면 Update, 없으면 Insert로 분기시키는 로직을 많이 작성하게 된다. 간단한 개념이지만 은근히 귀찮은 작업이기도 하다. 하지만 오라클 DB에서는 이를 한번에 판단해서 처리해주는 구문이 있다. 바로 Merge into 구문이다. MERGE [ hint ] INTO [ schema. ] { table | view } [ t_alias ] USING { [ schema. ] { table | view } | ( subquery ) } [ t_alias ] ON ( condition ) [ merge_update_clause ] [ merge_insert_clause ] [ error..
[Oracle] Sqldeveloper로 ERD 출력하기 오라클로 개발을 진행할떄 여러가지 Tool들이 사용되지만 오라클에서 무료로 제공는 Sqldeveloper로도 여러가지 기능이 제공되어 꽤 쓸만하다. DB 개발을 하다보면 테이블 갯수가 많아지고 구조가 복잡해지면 직접 테이블 간의 관계를 파악하기가 쉽지 않다. 이럴때 Sqldeveloper의 ERD출력 기능을 활용하면 분석에 많은 도움이 될 수 있다. 우선 상단 메뉴에서 파일 -> Data Modeler -> 임포트 -> 데이터 딕셔너리 를 선택 임포트 하려는 스키마/데이터베이스를 선택한다. 임포트할 객체(테이블)들을 선택한다. 최종 선택 내용 확인 후 완료를 선택한다. 선택한 객체들의 기본적인 내용과 객체간 참조 현황을 분석하여 표현하여 준다. 화면의 출력 내용을 Customizing하고자 한다면 원하는..
[Oracle] sql developer 툴로 데이터베이스 익스포트 하기 Oracle로 개발을 하면서 여러가지 툴을 사용할수 있으나 기본으로 제공하는 sql developer 툴을 사용해도 기능적으로는 손색이 없다. 조금 무겁고 느린 단점이 있지만 여러가지 기능을 지원하고 있다. 그중 데이터 베이스 익스포트 기능을 사용해서 데이터 베이스 전체 내용을 덤프하고.. 다시 로딩하는 방법을 살펴보자. 상단 메뉴 -> 도구 로 들어가면 데이터베이스 익스포트 항목이 있다. 선택을 하면 아래와 같이 소스/대상 선택 팝업이 뜬다. 접속할 DB Connection을 선택하고 익스포트할 항목을 선택한다. (기본적으로 삭제외에 모두 선택되어있다.) 저장 형식은 sql파일로 저장하고 별도의 디렉토리 항목을 선택하면 테이블생성, 데이터생성, 시퀀스 생성 등 기능별로 디렉토리를 분리하여 sql문을 덤..
[Oracle] WITH 문 사용법 WITH 절 이란? WITH절은 오라클9 버전 부터 지원 되는 구문으로 WITH 절로 임시 테이블을 생성해서 메모리에 올려 놓고 필요시 참조해서 쓸수 있는 장점이 있다. WITH절을 활용하지 않고 서브 쿼리로 작성 할 경우 공통 부분에 대한 공용화가 어렵고 가독성이 떨어지는 단점이 있는데 반해 WITH절을 활용하면 공용 부분을 미리 뽑아서 성능 및 가독성 향상을 꾀할 수 있다. WITH 절 장점 SQL에서 동일한 데이터를 반복처리시, 성능개선방법으로 WITH절이 많이 활용된다. 데이터 건수는 적지만 데이터 추출시 I/O처리량이 많은 경우 효과적이다. 여러 부분에 사용될 데이터를 1회 추출하여, Global Temporary Table에 저장하고, 요청시 저장된 데이터만 읽어 처리하면 되므로 SQL성능개선..