728x90
반응형

오라클 데이터 딕셔너리(Data Dictionary)

  • 오라클 데이터베이스 운영과 연관된 중요한 정보를 제공하는 읽기 전용 시스템 테이블
  • 뷰의 집합으로 일반 사용자가 직접 수정하는 것은 불가능하며 오라클 서버가 스스로 관리하는 영역(소유자: SYS)

 

모든 스키마 오브젝트(테이블, 인덱스, 뷰, 시퀀스, 동의어, DB링크, PL/SQL 함수나 프로시저)의 정의와 이 오브젝트에 대해 얼마나 많은 저장공간을 사용하는지, 칼럼의 기본값은 무엇이고 제약조건은 어떤 것들이 있는지, 오라클 사용자의 이름, DB에 생성된 권한과 롤 등이 어떻게 부여 되었는지, 객체접근 및 수정에 따른 시스템 감사정보, 데이터베이스 생성시각, 이름, 운영모드, 인스턴스의 이름 등과 같이 DB운영에 필요한 중요한 정보들이 기록된다.

오라클은 사용자 정보 및 관련 스키마 오브젝트와 저장구조등에 접근하기 위해 데이터 딕셔너리를 접근하고 사용자가 실행하는 DDL(Data Definition Language)에 맞추어 데이터 딕셔너리를 갱신하고 모든 오라클 사용자는 이러한 정보를 읽기 전용 뷰를 통해 참조할 수 있다.





▪️접두어에 따른 데이터 딕셔너리 분류

 Prefix  Access Scope
USER_ 현재 로그인한 계정이 생성한 모든 객체에 대한 정보
ALL_ 현재 로그인한 계정으로 접근 가능한 모든 객체에 대한 정보
DBA_ 데이터베이스 내 모든 객체에 대한 정보





예시

—-데이터베이스 사용자가 접근 가능한 딕셔너리뷰를 나열
SELECT *
FROM DICTIONARY
;

—-모든 프로시저, 함수, 패키지 소스가 text 컬럼에 담겨있음
SELECT *
FROM DBA_SOURCE
;

—-모든 테이블, 뷰, 프로시저 등의 정보
SELECT *
FROM DBA_OBJECTS
;

—-모든 테이블과 뷰에 지정된 comment 정보
SELECT *
FROM DBA_TAB_COMMENTS
;

—-모든 테이블과 뷰의 컬럼과 지정된 comment 정보
SELECT *
FROM DBA_TAB_COMMENTS
;








참조
http://www.ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=636

728x90
반응형
728x90
반응형
REGEXP_LIKE(컬럼, ‘패턴1|패턴2|패턴3’, [매칭파라미터])

NOT REGEXP_LIKE(컬럼, ‘패턴1|패턴2|패턴3’, [매칭파라미터])

 

  • 오라클 10g 버전부터 추가된 기능으로 유닉스(리눅스) 정규식과 파이프(|)문자를 사용하여 다양한 패턴의 다중 검색 가능



✅ 정규식

정규식의미 예시 설명
^문자열의 시작^K 대문자 K로 시작하는 문자열
$문자열의 끝H$ 대문자 H로 끝나는 문자열
.임의의 문자^.k 두번째 문자가 소문자 k인 문자열
 [^문자열]해당 문자열 제외[^A-Z]$ 대문자로 끝나는 문자열 제외
 [A-Z]A~Z 까지의 알파벳 대문자 중 하나에 매칭  
 [a-zA-Z]알파벳 대소문자 전체 중 하나에 매칭  
 [0-9]0~9 까지의 숫자 중 하나에 매칭  




✅ 예시

--직업명에 end 또는 Full 문자열을 포함하는 직원들 조회
SELECT *
FROM employees
WHERE yyyy = ‘2022’
AND REGEXP_LIKE(job, ‘end|Full’)
;

--직업명이 Android 또는 ios로 시작하는 직원들은 제외하고 조회
SELECT *
FROM employees
WHERE yyyy = ‘2022’
AND NOT REGEXP_LIKE(job, ‘^Android|^ios’)
;

--직업명이 Designer 또는 Developer로 끝나는 직원들 조회
SELECT *
FROM employees
WHERE yyyy = ‘2022’
AND REGEXP_LIKE(job, ‘Designer$|Developer$’)
;

--90년대 1월 또는 80년대 1월에 출생한 직원들 조회
SELECT *
FROM employees
WHERE yyyy = ‘2022’
AND REGEXP_LIKE(birth_date, ‘^9.01|^8.01’)
;


✅응용

SELECT *
FROM user_source
WHERE REGEXP_LIKE(text, (SELECT LISTAGG(table_name, ‘|’) WITHIN GROUP(ORDER BY table_name) AS table_name
                         FROM user_tables
                         WHERE table_name LIKE ‘%GNPS%’))


 

728x90
반응형
728x90
반응형
• 이전 행 데이터 리턴
LAG(컬럼명 [,offset] [,default]) OVER([PARTITION BY 그룹컬럼명] ORDER BY 정렬컬럼명)

• 다음 행 데이터 리턴
LEAD(컬럼명 [,offset] [,default]) OVER([PARTITION BY 그룹컬럼명] ORDER BY 정렬컬럼명)

-offset: 값을 가져올 행의 위치(기본 값: 1)
-default: 값이 없을 경우 출력할 기본 값(생략 시, null)



✅ 예시

SELECT yyyy
      ,pin
      ,start_date
      ,end_date   
      ,LAG(end_date) OVER(ORDER BY yyyy, pin, start_date) AS r_end_date --(실제)이전 근무 종료일
      ,LEAD(start_date) OVER(ORDER BY yyyy, pin, start_date) AS r_next_start_date --(실제)다음 근무 시작일
FROM employees 
AND yyyy = ‘2022’

 

yyyy pin start_date end_date r_end_date  r_start_date
2022 9501262250030 20220207 20220331 null 20220401
2022 9501262250030 20220401 20221231 20220331 20220829
2022 9208191210010 20220829 20220906 20221231 20220913
2022 9208191210010 20220913 20220914 20220906  20221207
2022 9208191210010  20221207 20221231 20220914  null



✅ 응용

--연속적으로 근무한 직원들의 pin 번호 조회
SELECT z.pin
FROM (
       SELECT y.*
             ,DENSE_RANK() OVER(ORDER BY y.pin) AS grp
       FROM (
              SELECT x.yyyy
                    ,x.pin
                    ,x.start_date
                    ,x.end_date
                    ,(CASE WHEN x.c_past_end_date = LAG(x.end_date) OVER(ORDER BY x.yyyy, x.pin, x.start_date) 
                           THEN 1 ELSE 0 END) AS chk1 --(예측)이전 근무 종료일과 (실제)이전 근무 종료일의 값 비교
                    ,(CASE WHEN x.c_next_start_date = LEAD(x.start_date) OVER(ORDER BY x.yyyy, x.pin, x.start_date)
                           THEN 1 ELSE 0 END) AS chk2 --(예측)다음 근무일과 (실제)다음 근무 시작일 값 비교
              FROM (
                     SELECT yyyy
                           ,pin
                           ,start_date --근무 시작일
                           ,end_date --근무 종료일
                           ,to_char(to_date(start_date, ‘YYYYMMDD’) - 1) As c_past_end_date --(예측)이전 근무 종료일
                           ,to_char(to_date(end_date, ‘YYYYMMDD’) + 1) AS c_next_start_date --(예측)다음 근무 시작일
                     FROM employees
                     AND yyyy = ‘2022’
                   ) x
            ) y
       WHERE ((y.chk1 = 1 AND y.chk = 0) 
               OR (y.chk1 = 1 AND y.chk = 1)
               OR (y.chk1 = 0 AND y.chk = 1))
     ) z
GROUP BY z.yyyy, z.pin, z.grp

 

728x90
반응형
728x90
반응형

https://www.oracle.com/kr/database/technologies/oracle-database-software-downloads.html#19c

 

Database Software Downloads | Oracle 대한민국

Oracle Database Express Edition Previous Database Release Software Oracle Database 10.2, 11.x, 12.x, and 18c are available as a media or FTP request for those customers who own a valid Oracle Database product license for any edition. To request access to t

www.oracle.com

 

 

1. 위의 오라클 공식 홈페이지에 접속하여 자신의 운영체제에 맞는 압축파일을 다운로드 한다.

(오라클 계정으로 로그인 해야만 다운로드 가능)

 

 

 

 

 

 

 

 

2. 다운 받은 압축파일을 풀고 setup 설치 파일을 실행한다.

 

 

단일 인스턴스 데이터베이스 생성 및 구성 선택 후 [다음]

 

 

 

 

 

 

- 데스크톱 클래스(D): 데이터베이스를 혼자 사용하는 경우 선택

- 서버 클래스(S): 네트워크 상의 여러 PC들과 네트워킹을 통해 DB를 사용할 때 선택

 

설치 용도가 개인 연습용이라면 데스크톱 클래스를 설치하고, 네트워크를 통해 여러 PC와 데이터를 주고 받는 작업을 할 경우 서버 클래스를 설치 하면 된다. 나는 서버 클래스로 설치를 진행

 

 

 

 

 

 

표준 설치 선택 후 [다음]

고급 설치를 통해 세밀한 설정을 할 수 있지만, 표준 설치로 진행해도 괜춘

 

 

 

 

 

 

가상 계정 사용 선택 후 [다음]

 

 

 

 

 

 

오라클을 삭제해야할 경우가 종종 생기는데 경로는 수정해버리면 해당 경로를 기억하고 있어야 하기 때문에 설치 경로는 특별한 경우가 아니라면 수정하지 말고 기본 설정대로 하는게 좋음. 근데 난 경로 수정함.

- admin 비밀번호는 따로 기록해두기!

 

 

 

 

 

 

 

필요 조건 검사 수행 > 요약 확인 후 [설치] 실행!

 

 

 

 

 

 

 

 설치 끝

 

 

 

 

 

 

 

3. 간단하게 cmd를 통해 설치 확인

 

 

cmd 창에서 sqlplus로 오라클 접속되면 잘 설치된거임

728x90
반응형

+ Recent posts