*** 문법 ***
DECODE (컬럼명 | 표현식
, 조건1, 결과1
, 조건2, 결과2
.......
, 조건n, 결과n
, 결과
)
*** 사용법 ***
[컬럼명 |표현식] : 이 값을 조건1부터 조건n까지 순차적으로 비교하여 같으면 해당 결과 return.
[결과] : 조건1 ~ 조건n에 모두 해당되지 않는 경우 return되는 기본값
*** 예제 ***
SELECT
DECODE ('A'
, 'A', 'Aaa'
, 'B', 'Bbb'
, 'Ccc'
)
FROM DUAL;
==> Aaa
SELECT
DECODE ('B'
, 'A', 'Aaa'
, 'B', 'Bbb'
, 'Ccc'
)
FROM DUAL;
==> Bbb
SELECT
DECODE ('C'
, 'A', 'Aaa'
, 'B', 'Bbb'
, 'Ccc'
)
FROM DUAL;
==> Ccc
Oracle - 테이블 컬럼 변경
*** 컬럼 추가 ***
alter table [테이블명] add([컬럼명] [데이터타입]);
ex) alter table USER add(USER_NAME varchar2(50));
*** 컬럼명 변경 ***
alter table [테이블명] rename column [이전컬럼명] to [새컬럼명];
ex) alter table USER rename column USER_NAME to USER_NM;
*** 컬럼 데이터 타입 변경 ***
alter table [테이블명] modify([컬럼명] [데이터타입]);
ex) alter table USER modify(USER_NM varchar2(100));
*** 컬럼 삭제 ***
alter table [테이블명] drop([컬럼명]);
ex) alter table USER drop(USER_NM);
alter table [테이블명] add([컬럼명] [데이터타입]);
ex) alter table USER add(USER_NAME varchar2(50));
*** 컬럼명 변경 ***
alter table [테이블명] rename column [이전컬럼명] to [새컬럼명];
ex) alter table USER rename column USER_NAME to USER_NM;
*** 컬럼 데이터 타입 변경 ***
alter table [테이블명] modify([컬럼명] [데이터타입]);
ex) alter table USER modify(USER_NM varchar2(100));
*** 컬럼 삭제 ***
alter table [테이블명] drop([컬럼명]);
ex) alter table USER drop(USER_NM);
Oracle - 테이블 복사하기
*** 테이블 복사 (스키미 & 데이터) ***
CREATE TABLE 생성테이블명 AS SELECT * FROM 복사할테이블명 [WHERE 절]
*** 테이블 구조만 복사 ***
CREATE TABLE 생성테이블명 AS SELECT * FROM 복사할테이블명 WHERE 1=2
*** 데이터만 복사 ***
INSERT INTO 데이터인서트할테이블명 SELECT * FROM 복사할테이블명 [WHERE 절]
CREATE TABLE 생성테이블명 AS SELECT * FROM 복사할테이블명 [WHERE 절]
*** 테이블 구조만 복사 ***
CREATE TABLE 생성테이블명 AS SELECT * FROM 복사할테이블명 WHERE 1=2
*** 데이터만 복사 ***
INSERT INTO 데이터인서트할테이블명 SELECT * FROM 복사할테이블명 [WHERE 절]
이클립스 단축키
*** 찾기 / 바꾸기 ***
*** 소스 코드 편집 ***
*** 리팩토링 ***
*** 소스 코드 네비게이션 ***
*** 실행 / 디버깅 ***
Ctrl + F | Find/Replace 다이얼로그 표시 |
Ctrl + K, Ctrl + Shift + K | 선택한 문자열과 동일한 다음/이전 문자열 찾기 |
Ctrl + J, Ctrl + Shift + J | 점증적 찾기 (incremental search) |
Ctrl + H | Search 다이얼로그 표시 |
*** 소스 코드 편집 ***
Ctrl + 1 | 빠른 수정 |
Ctrl + Space | 컨텐트 어시스트 |
Ctrl + Shift + Space | 파라미터 힌트 표시 |
Ctrl + / | 주석 토글 ('//' 사용) |
Ctrl + Shift + /, Ctrl + Shift + \ | 블럭 주석 추가/삭제 |
Ctrl + Shift + F | 소스 코드 형식 정리 |
Ctrl + Shift + O | import문 정리 |
Ctrl + D | 한 줄 삭제 |
Alt + Up, Alt + Down | 선택한 블럭을 한 줄 위(or 아래)로 이동 |
Alt + Shift + S | Source 메뉴 표시 |
Alt + Shift + T | Refactor 메뉴 표시 |
Alt + Shift + Z | Surround With 메뉴 표시 |
*** 리팩토링 ***
Alt + Shift + R | Rename |
Alt + Shift + V | Move |
Alt + Shift + C | Change Method Signature |
Alt + Shift + M | Extract Method |
Alt + Shift + L | Extract Local Variable |
Alt + Shift + I | Inline |
*** 소스 코드 네비게이션 ***
Ctrl + Shift + Up, Ctrl + Shift + Down | 클래스의 이전(or 다음) 멤버로 이동 |
Ctrl + Shift + P | 매칭되는 괄호로 이동 |
F3 | 선택한 요소가 선언된 곳으로 이동 |
F4 | 현재 타입의 상속 구조 표시 |
Ctrl + Alt + H | 메서드 호출 구조 표시 |
Ctrl + Shift + G | 메소드 or 필드 or 객체 참조하는 곳 찾기 |
Ctrl + Shift + R | 리소스 검색 |
Ctrl + Shift + T | 타입 검색 |
Alt + Shift + B | 브레드크럼에 현재 요소 표시 |
Ctrl + O | 빠른 개요 보기 |
Ctrl + T | 빠른 상속 구조 보기 |
Ctrl + ., Ctrl + , | 다음/이전 어노테이션(에러 or 경고)으로 이동 |
Ctrl + Q | 가장 최근에 편집한 위치로 이동 |
Ctrl + L | 지정한 행으로 이동 |
Alt + Left, Alt + Right | 뒤로/앞으로 이동 |
Ctrl + E | 다른 에디터로 이동 |
Ctrl + PgUp, Ctrl + PgDn | 다음/이전 에디터 활성화 |
Ctrl + F6, Ctrl + Shift + F6 | 다음/이전 에디터 이동 |
Ctrl + F7, Ctrl + Shift + F7 | 다음/이전 뷰 보기 |
Ctrl + F8, Ctrl + Shift + F8 | 다음/이전 퍼스펙티브 보기 |
F12 | 에디터 활성화 |
Ctrl + M | 현재 활성화된 뷰나 에디터 최대화 |
*** 실행 / 디버깅 ***
Ctrl + F11 | 실행모드로 실행 |
F11 | 디버그모드로 실행 |
Ctrl + Shift + B | 브레이크포인트 토글 |
F5 | Step Into |
F6 | Step Over |
F7 | Step Return |
Ctrl + R | Run to Line |
F8 | Resume |
Ctrl + F2 | 프로그램 종료 |
Oracle - to_date 사용
*** 사용법 ***
문자열 형식을 DATE 형식으로 변환한다.
to_date ('변환할 문자열', 'DATE 포맷')
*** 예제 ***
select to_date('2015-07-21 15:33:44', 'yyyy-mm-dd hh24:mi:ss') from dual;
=> 2015-07-21 오후 3:33:44
*** 포맷 참고 ***
yyyy : 년도. ex) 2015
yy : 년도. ex) 15
mm : 월.
dd : 일.
hh,hh12 : 시간. 12시 기준으로 표시
hh24 : 시간. 24시 기준으로 표시
mi : 분.
ss : 초.
문자열 형식을 DATE 형식으로 변환한다.
to_date ('변환할 문자열', 'DATE 포맷')
*** 예제 ***
select to_date('2015-07-21 15:33:44', 'yyyy-mm-dd hh24:mi:ss') from dual;
=> 2015-07-21 오후 3:33:44
*** 포맷 참고 ***
yyyy : 년도. ex) 2015
yy : 년도. ex) 15
mm : 월.
dd : 일.
hh,hh12 : 시간. 12시 기준으로 표시
hh24 : 시간. 24시 기준으로 표시
mi : 분.
ss : 초.
Linux - apache-tomcat에서 catalina.out 로그 없애기
톰캣 디렉토리 하위 bin 디렉토리에 있는
catalina.sh 파일에서
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi
이부분을 찾아서
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT=/dev/null
fi
로 변경
catalina.sh 파일에서
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi
이부분을 찾아서
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT=/dev/null
fi
로 변경
우분투 alias 설정
*** 설정 ***
사용자 홈 디렉토리에서
vi .profile 실행 후 다음과 같이 추가한다.
alias startup='/home/user/apache-tomcat-7.0.63/bin/startup.sh'
*** 적용 ***
source .profile 실행
사용자 홈 디렉토리에서
vi .profile 실행 후 다음과 같이 추가한다.
alias startup='/home/user/apache-tomcat-7.0.63/bin/startup.sh'
*** 적용 ***
source .profile 실행
Linux - vi 명령어
vi 시작 명령어
vi 커서 이동 명령어
문자,행 삽입 명령어
텍스트 삭제 명령어
복사 및 이동 명령어
행 번호 설정 명령어
행 찾기 명령어
탐색 및 대체 명령어
화면정리 명령어
파일 명령어
보관 및 종료 명령어
vi filename | 파일 열기, 작성 |
vi +18 filename | 18행으로 파일 열기 |
vi +/"문자열" fn | "문자열"의 처음발생 단어부터 열기 |
vi -r filename | 손상된 파일 회복 |
view filename | 읽기 전용으로 파일 열기 |
vi 커서 이동 명령어
h(←) | 왼쪽으로 커서 이동 |
j(↓) | 아래로 커서 이동 |
k(↑) | 위로 커서 이동 |
l(→) | 오른쪽으로 커서 이동 |
w | 오른쪽 한 단어의 끝 부분으로 커서 이동 |
e | 오른쪽 한 단어의 앞 부분으로 커서 이동 |
b | 왼쪽 한 단어의 앞 부분으로 커서 이동 |
Enter | 한 행 아래로 커서 이동 |
Back space | 한 문자 왼쪽으로 커서 이동 |
Space Bar | 한 문자 오른쪽으로 커서 이동 |
^ | 행의 맨 왼쪽으로 커서 이동 |
$ | 행의 맨 오른쪽으로 커서 이동 |
H | 화면의 맨 위로 이동 |
M | 화면의 중간으로 이동 |
L | 화면의 맨 아래로 이동 |
숫자G | 숫자만큼 지정한 줄로 커서 이동 |
Ctrl + f | 한 화면 위로 이동 |
Ctrl + b | 한 화면 아래로 이동 |
Ctrl + d | 반 화면 위로 이동 |
Ctrl + u | 반 화면 아래로 이동 |
Ctrl + e | 한 줄씩 위로 이동 |
Ctrl + y | 한 줄씩 아래로 이동 |
문자,행 삽입 명령어
a (종료:ESC) | 커서 오른쪽에 문자 삽입 |
A (종료:ESC) | 커서 오른쪽, 행의 끝에 문자 삽입 |
i (종료:ESC) | 커서 왼쪽에 문자 삽입 |
I (종료:ESC) | 커서 왼쪽, 행의 처음에 문자 삽입 |
o (종료:ESC) | 커서 아래에 행 삽입 |
O (종료:ESC) | 커서 위에 행 삽입 |
텍스트 변경 명령어 |
cw (종료:ESC) | 단어 변경 |
cc (종료:ESC) | 행 변경 |
C (종료:ESC) | 커서 오른쪽의 행 변경 |
s (종료:ESC) | 커서가 위치한 문자열 대체 |
S (종료:ESC) | 커서가 위치한 라인의 문자열 대체 |
r | 커서 위치 문자를 다른 문자로 대체 |
r-Enter | 행 분리 |
J | 현재 행과 아래 행 결합 |
xp | 커서 위치 문자와 오른쪽 문자 교환 |
~ | 문자형(대,소문자) 변경 |
u | 이전 명령 취소 |
U | 행 변경 사항 취소 |
:u | 이전의 최종 행 취소 |
. | 이전 최종 명령 반복 |
텍스트 삭제 명령어
x | 커서가 있는 문자 삭제 |
5x | 커서가 있는 위치부터 5개의 문자를 삭제 |
dw | 현재 커서가 있는 한단어 삭제 |
dd | 커서가 있는 라인 삭제 |
5dd | 커서가 있는 라인부터 5개의 라인 삭제 |
db | 커서의 위치에서 꺼꾸로 한단어 삭제 |
D | 커서 오른쪽 행 삭제 |
:5,10d | 5-10번째 행 삭제 |
복사 및 이동 명령어
yy | 행 yank 또는 복사 |
Y | 행 yank 또는 복사 |
P | yank되거나 삭제된 행 현재 행 위에 삽입 |
p | yank되거나 삭제된 행 현재 행 아래에 삽입 |
:1,2 co 3 | 1-2행을 3행 다음으로 복사 |
:4,5 m 6 | 4-5행을 6행 위로 이동 |
행 번호 설정 명령어
:set nu | 행 번호 표시 |
:set nonu | 행 번호 숨기기 |
행 찾기 명령어
G | 파일의 마지막 행으로 가기 |
21G | 파일의 21번째 행으로 가기 |
Ctrl + G | 현재의 filename과 line수를 알려줌 |
탐색 및 대체 명령어
/검색할 문자열/ | 오른쪽 아래 방향으로 문자열 검색 |
?검색할 문자열? | 왼쪽 위 방향으로 문자열 검색 |
n | 문자열의 다음으로 계속 검색 |
N | 문자열의 이전으로 계속 검색 |
:g/search-string/s//replace-string/gc | 각 발생 탐색 후 확인하고 대체 |
:s/str/rep/ | 현재 행의 str을 rep로 대체 |
:1,.s/str/rep/ | 1부터 현재 행의 str을 rep로 대체 |
:%s/str/rep/g | 파일 전체 str을 rep로 전부 대체 |
:.$/aaa/bbb/ | 커서의 위치로부터 화일의 끝까지 있는 모든 aaa를 bbb로 대체 |
화면정리 명령어
Ctrl + l | 불필요한 화면정리 후 다시 표시 |
파일 명령어
:r filename | 커서 다음에 파일 삽입 |
:34 r filename | 파일을 34번째 행 다음에 삽입 |
보관 및 종료 명령어
:w | 변경사항 보관 |
:w filename | 버퍼를 파일로 보관 |
:wq | 변경사항 보관 후 vi 종료 |
ZZ | 변경사항 보관 후 vi 종료 |
:q! | 변경사항 보관하지 않고 종료 |
:q | 수정한 파일을 저장하지 않고 vi 종료 |
:e! | 수정한 것을 무시하고 다시 편집상태로 |
Oracle - null 값 체크 - NVL, NVL2
*** 문법 ***
NVL(Expression, Value)
=> Expression : null 여부를 체크할 컬럼 or 표현식
Value : Expression 값이 null인 경우 return 할 값.
null이 아니면 Expression 값 return
NVL2(Expression, Value1, Value2)
=> Expression : null 여부를 체크할 컬럼 or 표현식
Value1 : Expression 값이 null이 아닌 경우 return 할 값.
Value2 : Expression 값이 null인 경우 return 할 값.
*** 예제 ***
SELECT NVL('A', 'N') from DUAL; -- 결과 : A
SELECT NVL(NULL, 'N') from DUAL; -- 결과 : N
SELECT NVL2('A', 'Y', 'N') from DUAL; -- 결과 : Y
SELECT NVL2(NULL, 'Y', 'N') from DUAL; -- 결과 : N
NVL(Expression, Value)
=> Expression : null 여부를 체크할 컬럼 or 표현식
Value : Expression 값이 null인 경우 return 할 값.
null이 아니면 Expression 값 return
NVL2(Expression, Value1, Value2)
=> Expression : null 여부를 체크할 컬럼 or 표현식
Value1 : Expression 값이 null이 아닌 경우 return 할 값.
Value2 : Expression 값이 null인 경우 return 할 값.
*** 예제 ***
SELECT NVL('A', 'N') from DUAL; -- 결과 : A
SELECT NVL(NULL, 'N') from DUAL; -- 결과 : N
SELECT NVL2('A', 'Y', 'N') from DUAL; -- 결과 : Y
SELECT NVL2(NULL, 'Y', 'N') from DUAL; -- 결과 : N
Oracle - CASE
*** 문법 ***
CASE 컬럼명 | 표현식
WHEN 조건식1 THEN 결과1
WHEN 조건식2 THEN 결과2
.......
WHEN 조건식n THEN 결과n
ELSE 결과
END
*** 사용법 ***
[결과] : WHEN 조건에 모두 해당되지 않는 경우 return되는 기본값
[컬럼명 |표현식] : 이 값이 조건식과 같은지 비교하여 같으면 해당 결과 return.
생략 가능하며 생략시 조건식에는 <, >, = 같은 연산식 사용.
만족하는 조건식이 여러 개일 경우 첫 번째 결과 return.
*** 예제 ***
SELECT
CASE 'AAA'
WHEN 'AAA' THEN 'A'
WHEN 'BBB' THEN 'B'
ELSE 'C'
END NM
FROM DUAL;
==> A
SELECT
CASE
WHEN 10 > 10 THEN 'A'
WHEN 10 > 10 THEN 'B'
ELSE 'C'
END NM
FROM DUAL;
==> C
CASE 컬럼명 | 표현식
WHEN 조건식1 THEN 결과1
WHEN 조건식2 THEN 결과2
.......
WHEN 조건식n THEN 결과n
ELSE 결과
END
*** 사용법 ***
[결과] : WHEN 조건에 모두 해당되지 않는 경우 return되는 기본값
[컬럼명 |표현식] : 이 값이 조건식과 같은지 비교하여 같으면 해당 결과 return.
생략 가능하며 생략시 조건식에는 <, >, = 같은 연산식 사용.
만족하는 조건식이 여러 개일 경우 첫 번째 결과 return.
*** 예제 ***
SELECT
CASE 'AAA'
WHEN 'AAA' THEN 'A'
WHEN 'BBB' THEN 'B'
ELSE 'C'
END NM
FROM DUAL;
==> A
SELECT
CASE
WHEN 10 > 10 THEN 'A'
WHEN 10 > 10 THEN 'B'
ELSE 'C'
END NM
FROM DUAL;
==> C
Linux - 디스크 용량 확인하기
*** 명령어 ***
1. df => 디스크 용량확인
ex)
root@testserver:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 18447100 4281368 13205632 25% /
none 4 0 4 0% /sys/fs/cgroup
udev 1023452 4 1023448 1% /dev
tmpfs 206732 1072 205660 1% /run
none 5120 4 5116 1% /run/lock
none 1033656 0 1033656 0% /run/shm
none 102400 0 102400 0% /run/user
/dev/sdb1 20510332 44992 19400432 1% /data
2. df -h => 디스크 용량을 M(메가), G(기가) 단위로 환산하여 표시
ex)
root@testserver:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 18G 4.1G 13G 25% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 1000M 4.0K 1000M 1% /dev
tmpfs 202M 1.1M 201M 1% /run
none 5.0M 4.0K 5.0M 1% /run/lock
none 1010M 0 1010M 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/sdb1 20G 44M 19G 1% /data
1. df => 디스크 용량확인
ex)
root@testserver:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 18447100 4281368 13205632 25% /
none 4 0 4 0% /sys/fs/cgroup
udev 1023452 4 1023448 1% /dev
tmpfs 206732 1072 205660 1% /run
none 5120 4 5116 1% /run/lock
none 1033656 0 1033656 0% /run/shm
none 102400 0 102400 0% /run/user
/dev/sdb1 20510332 44992 19400432 1% /data
2. df -h => 디스크 용량을 M(메가), G(기가) 단위로 환산하여 표시
ex)
root@testserver:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 18G 4.1G 13G 25% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 1000M 4.0K 1000M 1% /dev
tmpfs 202M 1.1M 201M 1% /run
none 5.0M 4.0K 5.0M 1% /run/lock
none 1010M 0 1010M 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/sdb1 20G 44M 19G 1% /data
CentOS에서 cannot restore segment prot after reloc: Permission denied 에러
*** 현상 ***
CentOS에서 프로그램 실행시 다음과 같은 에러가 발생하면서 실행되지 않는다.
failed /home/test/jdk1.7/jdk1.7.0_17/jre/lib/i386/client/libjvm.so, because /home/test/jdk1.7/jdk1.7.0_17/jre/lib/i386/client/libjvm.so: cannot restore segment prot after reloc: Permission denied
dl failure on line 864
*** 원인 ***
SELinux(Security-Enhanced Linux) 가 설치되어활성되어 발생.
*** 해결방안 ***
root 계정으로 다음 명령어를 실행하여 SELinux를 비활성화
/usr/sbin/setenforce 0
(참고 : SELinux를 다시활성화하려면 /usr/sbin/setenforce1 을 실행)
CentOS에서 프로그램 실행시 다음과 같은 에러가 발생하면서 실행되지 않는다.
failed /home/test/jdk1.7/jdk1.7.0_17/jre/lib/i386/client/libjvm.so, because /home/test/jdk1.7/jdk1.7.0_17/jre/lib/i386/client/libjvm.so: cannot restore segment prot after reloc: Permission denied
dl failure on line 864
*** 원인 ***
SELinux(Security-Enhanced Linux) 가 설치되어활성되어 발생.
*** 해결방안 ***
root 계정으로 다음 명령어를 실행하여 SELinux를 비활성화
/usr/sbin/setenforce 0
(참고 : SELinux를 다시활성화하려면 /usr/sbin/setenforce1 을 실행)
Oracle - 문자열 자르기 (substr)
*** 사용법 ***
1. substr(원본문자열, 시작인덱스)
원본문자열 시작인덱스(1부터 시작)부터 끝까지 자른다.
ex)
select substr('ABCDEFG', 1) from dual; 결과 : ABCDEFG
select substr('ABCDEFG', 1) from dual; 결과 : CDEFG
2.substr(원본문자열, 시작인덱스, 길이)
원본문자열 시작인덱스(1부터 시작)부터 길이만큼 자른다.
ex)
select substr('ABCDEFG', 1, 3) from dual; 결과 : ABC
select substr('ABCDEFG', 2, 3) from dual; 결과 : BCD
1. substr(원본문자열, 시작인덱스)
원본문자열 시작인덱스(1부터 시작)부터 끝까지 자른다.
ex)
select substr('ABCDEFG', 1) from dual; 결과 : ABCDEFG
select substr('ABCDEFG', 1) from dual; 결과 : CDEFG
2.substr(원본문자열, 시작인덱스, 길이)
원본문자열 시작인덱스(1부터 시작)부터 길이만큼 자른다.
ex)
select substr('ABCDEFG', 1, 3) from dual; 결과 : ABC
select substr('ABCDEFG', 2, 3) from dual; 결과 : BCD
Cron Expressions
*** 크론 필드 ***
Name | Required | Allowed Values | Allowed Special Characters |
---|---|---|---|
Seconds | Y | 0-59 | , - * / |
Minutes | Y | 0-59 | , - * / |
Hours | Y | 0-23 | , - * / |
Day of month | Y | 1-31 | , - * ? / L W C |
Month | Y | 0-11 or JAN-DEC | , - * / |
Day of week | Y | 1-7 or SUN-SAT | , - * ? / L C # |
Year | N | empty or 1970-2099 | , - * / |
*** 예제 ***
0 0 12 * * ? | 매일 12:00 PM (정오) 에 실행 |
0 15 10 ? * * | 매일 10:15 AM 에 실행 |
0 15 10 * * ? | 매일 10:15 AM 에 실행 |
0 15 10 * * ? * | 매일 10:15 AM 에 실행 |
0 15 10 * * ? 2005 | 2005년 매일 10:15 AM 에 실행 |
0 * 14 * * ? | 매일 2:00 PM 에서 2:59 PM 까지 매 1분마다 실행 |
0 0/5 14 * * ? | 매일 2:00 PM 에서 2:55 PM 까지 매 5분마다 실행 |
0 0/5 14,18 * * ? | 매일 2:00 PM 에서 2:55 PM 까지, 그리고 6:00 PM 부터 6:55 PM 까지 매 5분마다 실행 |
0 0-5 14 * * ? | 매일 2:00 PM 에서 2:05 PM 까지 매 1분마다 실행 |
0 10,44 14 ? 3 WED | 매년 3월 수요일마다 2:10 PM, 2:44 PM 에 실행 |
0 15 10 ? * MON-FRI | Fire at 10:15 AM every Monday, Tuesday, Wednesday, Thursday and Friday |
0 15 10 15 * ? | Fire at 10:15 AM on the 15th day of every month |
0 15 10 L * ? | Fire at 10:15 AM on the last day of every month |
0 15 10 ? * 6L | Fire at 10:15 AM on the last Friday of every month |
0 15 10 ? * 6L | Fire at 10:15 AM on the last Friday of every month |
0 15 10 ? * 6L 2002-2005 | Fire at 10:15 AM on every last friday of every month during the years 2002, 2003, 2004, and 2005 |
0 15 10 ? * 6#3 | Fire at 10:15 AM on the third Friday of every month |
0 0 12 1/5 * ? | Fire at 12 PM (noon) every 5 days every month, starting on the first day of the month |
0 11 11 11 11 ? | 매년 11월 11일 11:11 AM 에 실행 |
Oracle - 테이블 락 확인하기
*** 락 테이블 조회 ***
SELECT
B.OBJECT_NAME, B.OWNER, B.OBJECT_TYPE, A.XIDUSN, A.SESSION_ID, A.LOCKED_MODE
FROM
V$LOCKED_OBJECT A, DBA_OBJECTS B
WHERE A.OBJECT_ID = B.OBJECT_ID
;
*** 특정 테이블 락 여부 확인 ***
SELECT
A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME
FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
WHERE A.SID=B.SID AND B.ID1=C.OBJECT_ID AND B.TYPE='TM'
AND C.OBJECT_NAME = '테이블명'
;
SELECT
B.OBJECT_NAME, B.OWNER, B.OBJECT_TYPE, A.XIDUSN, A.SESSION_ID, A.LOCKED_MODE
FROM
V$LOCKED_OBJECT A, DBA_OBJECTS B
WHERE A.OBJECT_ID = B.OBJECT_ID
;
*** 특정 테이블 락 여부 확인 ***
SELECT
A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME
FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
WHERE A.SID=B.SID AND B.ID1=C.OBJECT_ID AND B.TYPE='TM'
AND C.OBJECT_NAME = '테이블명'
;
CentOS 버전 확인하기
터미널에서 다음 명령어를 사용하여 버전을 확인할 수 있다.
*** 명령어 ***
> lsb_release -a
*** 결과 ***
LSB Version: 1.3
Distributor ID: RedHatEnterpriseES
Description: Red Hat Enterprise Linux ES release 3 (Taroon Update 4)
Release: 3
Codename: TaroonUpdate4
*** 명령어 ***
> lsb_release -a
*** 결과 ***
LSB Version: 1.3
Distributor ID: RedHatEnterpriseES
Description: Red Hat Enterprise Linux ES release 3 (Taroon Update 4)
Release: 3
Codename: TaroonUpdate4
MyBatis (iBatis) 특수문자 처리
쿼리에 특수문자가 있는 경우 에러가 발생하는데
<![CDATA[ ]]> 태그를 사용하면 정상적으로 실행된다.
***사용예(XML) ***
<select id="getMoney" parameterType="map" resultMap="HashMap">
SELECT *
FROM USER
WHERE MONEY <![CDATA[ < ]]> 10000
</select>
***사용예(java class) ***
@Insert(""
+ "<script><![CDATA["
+ " INSERT INTO USER (USER_ID, USER_NM, MONEY)"
+ " VALUES ('aaa', '․피아노', 100000)"
+ "]]></script>"
)
<![CDATA[ ]]> 태그를 사용하면 정상적으로 실행된다.
***사용예(XML) ***
<select id="getMoney" parameterType="map" resultMap="HashMap">
SELECT *
FROM USER
WHERE MONEY <![CDATA[ < ]]> 10000
</select>
***사용예(java class) ***
@Insert(""
+ "<script><![CDATA["
+ " INSERT INTO USER (USER_ID, USER_NM, MONEY)"
+ " VALUES ('aaa', '․피아노', 100000)"
+ "]]></script>"
)
Java - JAXB를 사용한 XML to Java Object
JAXB를 이용해서 XML 데이터를 자바 오브젝트로 변경할 수 있다.
*** Maven Depenendcy ***
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.1</version>
</dependency>
*** JAXB 사용예 ***
JAXBContext context = JAXBContext.newInstance(Cars.class);
Unmarshaller un = context.createUnmarshaller();
Cars cars = un.unmarshal(new File(a.xml)); // File, InputStream, URL 등 사용 가능
*** a.xml ***
<Cars>
<CarList>
<CarInfo>
<Name>abc</Name>
<Year>2001</Year>
</CarInfo>
<CarInfo>
<Name>zzz</Name>
<Year>1999</Year>
</CarInfo>
</CarList>
<TotalCount>2</TotalCount>
</Cars>
*** Cars.java ***
@XmlRootElement(name = "Cars")
public class Cars
{
private List<CarInfo> carList;
private int totalCount;
public List<CarInfo> getCarList() {
return carList;
}
@XmlElementWrapper(name = "CarList")
@XmlElement(name = "CarInfo")
public void setCarList(List<CarInfo> carList) {
this.carList = carList;
}
public int getTotalCount() {
return totalCount;
}
@XmlElement(name = "TotalCount")
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
}
*** CarInfo.java ***
@XmlRootElement(name = "CarInfo")
public class CarInfo
{
private String name;
private int year;
public String getName() {
return name;
}
@XmlElement(name = "Name")
public void setName(String name) {
this.name = name;
}
public int getYear() {
return year;
}
@XmlElement(name = "Year")
public void setYear(int year) {
this.year = year;
}
}
*** Maven Depenendcy ***
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.1</version>
</dependency>
*** JAXB 사용예 ***
JAXBContext context = JAXBContext.newInstance(Cars.class);
Unmarshaller un = context.createUnmarshaller();
Cars cars = un.unmarshal(new File(a.xml)); // File, InputStream, URL 등 사용 가능
*** a.xml ***
<Cars>
<CarList>
<CarInfo>
<Name>abc</Name>
<Year>2001</Year>
</CarInfo>
<CarInfo>
<Name>zzz</Name>
<Year>1999</Year>
</CarInfo>
</CarList>
<TotalCount>2</TotalCount>
</Cars>
*** Cars.java ***
@XmlRootElement(name = "Cars")
public class Cars
{
private List<CarInfo> carList;
private int totalCount;
public List<CarInfo> getCarList() {
return carList;
}
@XmlElementWrapper(name = "CarList")
@XmlElement(name = "CarInfo")
public void setCarList(List<CarInfo> carList) {
this.carList = carList;
}
public int getTotalCount() {
return totalCount;
}
@XmlElement(name = "TotalCount")
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
}
*** CarInfo.java ***
@XmlRootElement(name = "CarInfo")
public class CarInfo
{
private String name;
private int year;
public String getName() {
return name;
}
@XmlElement(name = "Name")
public void setName(String name) {
this.name = name;
}
public int getYear() {
return year;
}
@XmlElement(name = "Year")
public void setYear(int year) {
this.year = year;
}
}
Oracle - MERGE INTO 한 쿼리로 INSERT 혹은 UPDATE 하기
테이블에 데이터 추가시 조건에 해당하는 값이 존재하면 해당 행을 UPDATE하고,
없으면 INSERT 하는 경우 사용.
*** 문법 ***
*** 예제 ***
MERGE INTO USER_INFO U
USING DUAL
ON (U.USER_ID = 'abcde')
WHEN MATCHED THEN
UPDATE SET USER_NM = 'name'
, USE_YN = 'Y'
WHEN NOT MATCHED THEN
INSERT (USER_ID, USER_NM, USE_YN)
VALUES ('abcde','name', 'Y')
없으면 INSERT 하는 경우 사용.
*** 문법 ***
MERGE
INTO
[
schema
. ] {
table
|
view
} [ t_alias ]
USING { [
schema
. ] {
table
|
view
}
| subquery
} [ t_alias ]
ON
( condition )
WHEN
MATCHED
THEN
UPDATE
SET
column
= { expr |
DEFAULT
}
[,
column
= { expr |
DEFAULT
} ]...
[
DELETE
where_clause ]
WHEN
NOT
MATCHED
THEN
INSERT
[ (
column
[,
column
]...) ]
VALUES
({ expr [, expr ]... |
DEFAULT
})
- - INTO : DATA가 UPDATE되거나 INSERT 될 테이블
- - USING : 비교할 SOURCE 테이블 혹은 서브쿼리. INTO절의 테이블과 동일하거나 다를 수 있음.
- - ON : UPDATE나 INSERT를 하게 될 조건. 해당 조건을 만족하는 DATA가 있으면 WHEN MATCHED 절 실행
- , 없으면 WHEN NOT MATCHED 절 실행.
- - WHEN MATCHED : ON 조건절이 TRUE인 ROW에 수행 할 내용. UPDATE, DELETE포함 될 수 있음.
- - WHEN NOT MATCHED : ON 조건절에 맞는 ROW가 없을 때 수행할 내용. INSERT
*** 예제 ***
MERGE INTO USER_INFO U
USING DUAL
ON (U.USER_ID = 'abcde')
WHEN MATCHED THEN
UPDATE SET USER_NM = 'name'
, USE_YN = 'Y'
WHEN NOT MATCHED THEN
INSERT (USER_ID, USER_NM, USE_YN)
VALUES ('abcde','name', 'Y')
피드 구독하기:
글 (Atom)