DECLARE
person emp%ROWTYPE;
BEGIN
SELECT *
INTO person
FROM emp
WHERE yyyy = ‘2022’
AND dept_code = ‘04001000’
AND name = ‘에이다 러블레이스‘
;
—-IF조건문
IF person.name = ‘에이다 러블레이스’;
THEN dbms_output.put_line(‘세계 최초의 프로그래머입니다.’);
ELSIF person.name = ‘제임스 고슬링’;
THEN dbms_output.put_line(‘최초로 JAVA를 개발하였습니다.’);
ELSE
dbms_output.put_line(‘정보가 없습니다.’);
END IF;
—-단순CASE조건문
CASE person.name
WHEN ‘에이다 러블레이스‘ THEN dbms_output.put_line(‘세계 최초의 프로그래머입니다.’);
WHEN ‘제임스 고슬링‘ THEN dbms_output.put_line(‘최초로 JAVA를 개발하였습니다.’);
ELSE
dbms_output.put_line(‘정보가 없습니다.’);
END CASE;
—-검색CASE조건문
CASE
WHEN person.salary < 3000000 THEN dbms_output.put_line(‘기본급이 300만원 미만입니다.’);
ELSE
dbms_output.put_line(‘기본급이 300만원 이상입니다.’);
END CASE;
2. 반복문
LOOP: 기본 반복문
WHILE LOOP: 특정 조건식의 결과를 통해 반복 수행
FOR LOOP: 반복 횟수를 정하여 반복 수행
CURSOR FOR LOOP: 커서를 활용한 반복 수행
*반복 수행을 중단 시키거나 특정 반복 주기를 건너뛰는 명령어
EXIT: 수행 중인 반복 종료
EXIT WHEN: 반복 종료를 위한 조건식을 지정하고 만족하면 반복 종료
CONTINUE: 수행 중인 반복의 현재 주기를 건너뜀
CONTINUE WHEN: 특정 조건힉을 지정하고 조건식을 만족하면 현재 반복 주기를 건너뜀
DECLARE
num NUMBER(10) DEFAULT 1;
total NUMBER(10) DEFAULT 0;
v_emp emp%ROWTYPE;
CURSOR c_emp IS
SELECT *
INTO v_emp
FROM emp
WHERE yyyy = ‘2022’
AND dept_code = 04001000’
;
BEGIN
—-기본LOOP(1부터 10까지 합산값 구하기)
LOOP
total := total + num;
num := num + 1;
IF num > 10 THEN EXIT;
END IF;
END LOOP;
total := 0;
num := 1;
—-WHILE LOOP
—-반복 수행 전에 조건식을 검사하기 때문에 조건식 결과 값에 따라 단 한 번도 반복 수행 되지 않을 수도 있음!
WHILE num < 11 LOOP
total := total + num;
num := num + 1;
END LOOP;
total := 0;
—-FOR LOOP
FOR i IN 1..10 LOOP
total := total + i;
CONTINUE WHEN MOD(i, 2) = 0;
dbms_output.put_line(‘i: ‘||i);
END LOOP;
—-CURSOR FOR LOOP(커서 출력)
FOR i IN c_emp LOOP
dbms_output.put_line(‘이름: ‘||i.name||’, 기본급: ’||i.salary);
END LOOP;
END
;
뷰의 집합으로 일반 사용자가 직접 수정하는 것은 불가능하며 오라클 서버가 스스로 관리하는 영역(소유자: 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
;
💡리눅스에서 파일이나 디렉터리를 사용해 할 수 있는 작업은 크게 세 가지로 나뉘는데 이 작업에 대한 권한을파일(디렉터리)마다 사용자에 따라 지정
작업
사용자
1. 읽기(read) 2. *쓰기(write) 3. 실행(execute)
1. 사용자(user) 2. 그룹(group) 3. 기타(others) 4. 모든 사용자(a=u+g+o)
*파일에 부여되는 쓰기(w) 권한
파일 내용을 수정할 수 있는 권한
파일 생성, 삭제, 이동 등에 대한 권한은 파일이 아니라 상위 디렉터리에 쓰기(w) 권한이 부여되어 있어야 함
*디렉터리에 부여되는 쓰기(w) 권한
디렉터리 내부에 파일을 생성, 삭제, 이동이 가능한 권한
▪️ls -l
파일이나 디렉터리에 지정된 권한이나 파일 소유자와 그룹을 확인
현재 디렉터리 내 파일 리스트(ls=list)가 하나의 파일 단위로 한 줄로 길게(-l=long) 출력
첫번째 필드: 사용자 별 권한
d
r
w
x
r
-
x
r
-
x
*파일유형
사용자
그룹
기타
*파일 유형
일반 파일
-
디렉터리
d
특수 파일
블록 파일
b
입출력 파일
c
심볼릭 링크 파일
l
파이프
p
소켓
s
세번째 필드: 파일 소유자명
네번째 필드: 그룹명
✅ chmod(Change Mode)
파일이나 디렉터리의 *모드를 변경(파일이나 디렉터리의 권한 변경)
chmod [옵션] [모드] [파일 및 디렉터]
*모드(mode)
사용자(u, g, o, a) 별 권한(r, w, x)에 대한 설정값을 숫자모드와 기호모드로 표현
기호모드
사용자
작업
*연산자
u
g
o
a
r
w
x
-
+
-
=
숫자모드
4
2
1
*연산자
허가권 부여: +
허가권 제거: -
허가권 지정(기존 속성값은 사라짐): =
▪️ 옵션
옵션
의미
-R
경로와 그 하위 파일들을 모두 변경
✅ 예시
#test.txt 파일에 소유자만 읽기,쓰기 권한이 부여된 상태에서
#소유자에게 실행 권한을 부여하고 그룹과 기타 사용자에게 쓰기 권한 부여
chmod u+x,go+w test.txt
chmod 722 test.txt
#myDir 디렉터리와 하위 파일과 디렉터리 대상으로 기타 사용자에게 쓰기 권한 부여
chmod -R o+w myDir
여러 파일들을 하나로 묶은 것(묶은 파일들이 .tar 안으로 들어가는게 아니라 복사된 파일들이 .tar 로 묶임)
파일들의 속성과 디렉터리 구조 등을 모두 보존하며 묶기 때문에
압축&압축해제 등의 작업을 거치면서 파일이 변경, 소실될 염려가 없어서 소스 배포 파일을 만드는 용도로 자주 사용
tar 파일 크기가 커짐. 그래서 무조건 압축 기술(gz, bz2..)도 같이 사용 => 한번에 묶고 압축까지!
tar [옵션] [파일] ...
▪️옵션
옵션
의미
-f [tar 파일명]
생성할 tar 파일명(file name) 또는 해제할 tar 파일명을 지정하는 옵션으로 무조건 붙여줘야 함
-c
tar 파일 생성(create)
-x
tar 파일 해제(extract)
-t
tar 파일 속 파일들을 펼쳐서 list 형태로 출력
-v
처리되는 과정(파일 정보)을 자세하게 나열
-r [추가할 파일]
기존 tar 파일에 새로운 파일 추가
-C [PATH]
지정한 경로의 디렉터리로 이동
-j
bzip2 압축 적용 옵션(tar.bz2)
-J
xz 압축 적용 옵션(tar.xz)
-z
gzip 압축 적용 옵션(tar.gz)
✅ 예시
#대상 디렉터리를 포함한 모든 파일과 디렉터리를 tar로 묶기
tar -cvf test.tar [PATH]
#파일을 지정하여 tar로 묶기
tar -cvf test.tar [FILE1] [FILE2]
#현재 디렉터리에 tar 해제
tar -xvf test.tar
#지정된 디렉터리에 tar 해제
tar -xvf test.tar -C [PATH]
#묶여있는 파일 목록 확인
tar -tvf test.tar
#myTest 디렉터리를 tar로 묶고 gz으로 압축
tar -zcvf test.tar.gz myTest
#gzip으로 압축된 tar를 현재 디렉터리에 해제
tar -zxvf test.tar.gz
오라클 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%’))