728x90
반응형

DB (데이터베이스)/Oracle (오라클) 56

[Oracle] regexp_substr로 특정 문자 기준으로 문자열 자르기

oracle에서 SUBSTR을 사용하여 문자열을 자르는 경우도 있지만 특정 문자열을 기준으로 분리하여 조회하는 경우도 있다. 예를들어 전화번호의 값이 010-XXXX-XXXX의 형식으로 저장되어 있을 때 중간4개의 번호만 조회하는 경우가 있을 수 있다. REGEXP_SUBSTR을 사용하여 특정문자를 구분자로 두고 문자열을 자를 수 있다. 사용법은 REGEXP_SUBSTR('컬럼 또는 값' , '[^ (구분자) ]+', 구분자를 찾을 위치, 구분자를 찾은 순서) 의 포멧이다. 간단하게 DBA_DATA_FILES 로 예시를 들어보면 SELECT file_name, regexp_substr(file_name, '[^\]+', 1, 1) STR1, regexp_substr(file_name, '[^\]+', 1..

[Oracle] regexp_substr로 날짜 추출하기

oracle의 regexp_substr함수로 string에 날짜가 포함되어있는 경우 날짜만 추출하는 방법을 알아보겠습니다. 우선 test_c 라는 테이블에 아래와 같이 데이터가 들어가 있다고 가정합니다. value값에 aa_08_2023 aa_aa_aa_202308 aa_aa_aa_2023_08 aa_aa_aa_20230803 이런식으로 문자와 날짜데이터가 동시에 들어가 있는 경우 날짜만을 추출하고 싶을 때 아래와 같은 sql문을 작성하여 조회할 수 있습니다. SELECT CASE WHEN regexp_substr(value, '([0-9]{4}_[0-9]{2})') IS NOT NULL THEN to_date(regexp_substr(value, '([0-9]{4}_[0-9]{2})'), 'yyyy-m..

[Oracle] oracle drop user시 ORA-06904 발생 해결

Oracle에서 사용자 삭제 (drop user)할 때 ORA-06904 : 순환 SQL레벨 1에 오류가 발생했습니다. 라는 애러를 마주 할 수 있다. 1. 애러 발생원인 해당 사용자를 삭제하려면 사용중인 session 또는 resource를 반납해야 삭제가 가능하다. 하지만 sys계정이라도 삭제하려는 사용자의 resource를 강제로 반납할 수는 없다. 따라서 삭제하려는 계정에 resource와 session을 반환할 수 있는 권한을 부여한 후 삭제한다. 2. 애러 해결방법 sysdba접속 sqlplus "/as sysdba" 삭제하려는 계정에 resource와 dba권한 부여 grant resource, dba to 사용자; 해당계정 삭제 drop user 사용자;

[Oracle] oracle statspack 설치

Oracle Statspack은 Oracle Database에 대한 resource 사용량분석 성능문제 분석을 위해 사용되는 툴이다. awrrpt를 사용하는것이 편리하나 awr의 경우 Oracle Enterprise Edition을 사용하더라도 Diagnostic Pack이 포함되어 있지 않으면 원칙적으로는 사용이 불가하다. 따라서 Diagnostick Pack을 구매하지 않은 경우 Awrrpt 기능응 사용할 수 없다. 반면에 statspack은 무료로 사용이 가능하다. 설치방법 및 사용방법에 대해 알아보습니다. 우선 Statspack을 구성하는 script를 확인해보겠습니다. 1. Statspack을 구성하는 script - Spcreate.sql : statspack 설치 script - Sprepr..

[Oracle] oracle ROW_NUMBER 사용방법

Oracle 분석함수에 ROW_NUMBER 사용방법에 대해서 알아보겠습니다 ROW_NUMBER는 정렬된 결과에 대해 순위를 부여하는 기능이다. 1. 예시쿼리 select deptno, weigth, name, RANK() OVER (PARTITION BY deptno ORDER BY weigth) as weigth_rank DENSE_RANK() OVER (PARTITION BY deptno ORDER BY weigth) as weigth_dense, ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY weigth) as weigth_row from student ORDER BY deptno, weigth, name; 위 결과와 같이 RANK()와 DENSE_RANK()..

[Oracle] Oracle NTILE분석 함수

Oracle NTILE분석 함수는 출력결과를 사용자가 지정한 그룹 수로 나누어 출력하는 함수이다. 1. 사용 format select NTILE() over (partition by order by ) 2. 사용예제 student테이블에서 생년월일을 오름차순으로 정렬한 결과를 4개의 그룹으로 나누어 출력 select studno, name, birthdate, NTILE(4) over (order by birthdate) class from student; 3. 출력결과

[Oracle] oracle RANK()함수, DENSE_RANK()함수

ORACLE분석함수 중 RANK()함수와, DENSE_RANK()함수의 차이를 한번에 설명할 수 있는 쿼리를 작성하겠다. SELECT studno, name, height, RANK() OVER (ORDER BY height DESC) as heigth_rank DENSE_RANK() OVER (ORDER BY heigth DESC) as heigth_dense FROM STUDENT; 위와 같이 RANK()분석 함수와 DENSE_RANK() 분석함수를 조회할 수 있다. 위 사진 결과를 보면 171의 동일한 height를 가진 인원이 3명있다. rank의 경우 171의 순위를 모두 8등으로 지정하고 그 다음등수는 11등으로 부여한다. dense_rank의 경우 171의 순위를 모두 8등으로 지정하고 그 ..

[Oracle] oracle 페이징 조회 top-n쿼리

Oracle분석함수 TOP-N분석은 전체 컬뤔 값 중에서 큰 값이나 작은 값 순으로 상위 N개를 출력하는 기능이다. TOP-N기능을 사용하기 위해서는 반드시 '서브쿼리', '인라인 뷰'를 반드시 이용해야한다. 그리고 서브쿼리나 인라인뷰의 결과에 대해 WHERE절에서 ROWNUM을 사용하여 출력하야 한다. 주의할 점은 ROWNUM과 상수 N의 비교 연산자는 반드시 '

[Oracle] 윈도우(Windows)에 설치된 Oracle 제거 방법

윈도우(Windows)에 설치된 Oracle을 제거하는 방법에 대해서 알아보겠습니다. 1. cmd 실행 cmd (관리자권한 으로 실행) 2. %ORACLE_HOME%/deinstall 로 이동 만약 %ORACLE_HOME%에 대한 환경변수가 없을 경우 오라클이 설치된 디렉토리를 전부 입력해서 이동한다. 3. deinstall.bat 배치파일 실행 cmd> deinstall.bat 을 실행하면 아래와 같이 삭제 프로세스가 실행된다. 구성을 해제할 단일 인스턴스 리스너를 모두 지정하십시오. 모두 선택 해제하려면 .(마침표)를 입력하십시오.[LISTENER] : LISTENER (리스너명) 이 Oracle홈에 구성된 데이터베이스 이름 목록을 지정하십시오[ORCL] : ORCL (오라클 SID명) 이 데이터베이..

728x90
반응형