1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Exception in thread "rebel-messaging-executor-24" java.lang.OutOfMemoryError : PermGen space
        at org.zeroturnaround.javarebel.reporting.MixpanelMetrics$4.build(SourceFile:159)
        at org.zeroturnaround.javarebel.reporting.MixpanelMetrics$10.run(SourceFile:308)
        at org.zeroturnaround.javarebel.reporting.MetricsExecutor.runTask(SourceFile:63)
        at org.zeroturnaround.javarebel.reporting.MetricsExecutor.run(SourceFile:49)
        at java.lagn.Thread.run(Thread.java:662)
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.OutOfMemoryError: PermGen space
cs


이클립스 콘솔 창에서 이러한 오류가 계속 뜨면서 톰캣 실행이 되지 않았다.

원인은 톰캣 서버의 공간이 부족해서 일어난 에러였고, 해결 방법은 이러하다.



서버 클릭 > Open launch configuration 클릭 > Arguments 탭 클릭 > 'VM arguments' 부분에

 

 -XX:MaxpermSize=256m -Xms256m -Xmx512m

를 추가하고, 이클립스를 재시작 한 뒤 서버를 다시 기동한다.


1. 프로젝트를 한 번 클릭하고, 마우스 우클릭을 해 Properties로 들어간다.

 

 

2. Java Build Path > Source > Default output folder에서 경로를 확인한다.

 


ORDER BY로 정렬할 경우 모든 데이터를 가지고 정렬을 하지만,


ORDER SIBLINGS BY는 계층별로 정렬을 한다.


계층 구조의 그룹으로 묶어 정렬하기 위해 사용함.


*  START WITH B : 부모의 시작 조건

  CONNECT BY PRIOR A = B : 자신 키와 부모 키 비교

  ORDER SIBLINGS B Y B ASC, A ASC : 계층 내의 ORDER BY

오라클에서 날짜 형식에 대해 타입을 잘못 지정했을 경우 발생하는 에러이다.


개발 컴퓨터에서는 에러가 발생하지 않았으나, 운영 서버로 기동했을시 발생하는 경우가 종종 있다.


반드시 SELECT TO_DATE(SYSDATE, 'YYYY-MM-DD') FROM DAUL; 과 같이 분명한 날짜 형식으로 지정해줘야 다음과 같은 에러가 발생하지 않는다.


원인은 DATE 형태의 포맷이 클라이언트(Session) 마다 NLS_DATE_FORMAT에 디폴트로 설정이 되어있지만, 컴퓨터마다 환경 설정이 다르게 되어있기 떄문이다.

1. NULL

인스턴스가 생성되지 않은 상태를 말한다. List 변수가 메모리에 아무런 주소값도 창조하지 않은 상태이다.

그러므로, List에 값이 없을 경우 null로 체크하면 안된다.



2. isEmpty()

size() = 0

자바 SE 1.6 이상에서만 사용 가능하다.

인스턴스는 생성되었으나, List 안에 아무것도 없는 상태를 말한다. (값이 존재하지 않는 상태)

객체에 ""이란 값으로 들어가 있는 상태이다. (공백도 값으로 처리가 되기 때문에)

'BackEnd > Java' 카테고리의 다른 글

자바와 객체 지향  (0) 2020.11.17
객체지향 디자인 패턴1 (퍼사드, 싱글톤)  (0) 2020.11.03
LinkedHashMap  (0) 2017.06.29
RSA 암호화 구현  (0) 2017.03.14
Java :: Spring 파일 업로드 (multipart-form/data)  (2) 2017.03.14

1. NVL()

NVL(param, 1) 

모든 데이터 타입에 적용 가능한 함수.

param이 NULL일 경우 1을 반환하고, 그렇지 않은 경우 (NULL이 아닌 경우) param 값을 반환한다.



2. NVL2()

NVL2(param1, param2, param3) 

param1이 NULL이 아니면 param2를 반환하고, NULL이면 param3을 반환한다.



3. DECODE()

DECODE(param, null, "1", "2") 

param이 NULL일 경우 "1"을 반환, NULL이 아닐 경우 "2"를 반환한다.



4. NULLIF()

NULLIF(param1, param2) 

param1의 값이 param2의 값과 같으면 NULL을 반환하고 같지 않으면 param1의 값을 반환하다.

(= CASE WHEN param1 = param2 THEN NULL ELSE param1 END)



5. COALESCE()

COALESCE(param1, param2, param3... paramN) 

비교하는 데이터의 타입을 모두 통일시켜야 하는 함수.

(데이터 타입이 일치하지 않을시 => ORA-00932 : 데이터 유형이 일치하지 않습니다 에러 발생함)

모든 값이 NULL일 경우 NULL을 반환한다.

param1이 NULL이 아닐 경우 param1을 반환하나, param1이 NULL일 경우 param2의 값을 체크하고

=> param2가 NULL이 아닐 경우 param2의 값을 반환하나, param2가 NULL일 경우 param3의 값을 체크

=> ....paramN까지 반복

1. 정의

데이터 사전. Data Dictionary.

대부분 읽기 전용으로 제공되는 테이블. 뷰들의 집합이며, 데이터베이스 전반에 대한 정보를 제공한다.

오라클 DB는 명령이 실행될 때마다 데이터 사전에 접근한다. 데이터베이스 작업을 하는 동안, 오라클은 데이터 사전을 읽어 객체 존재 여부와 함께 사용자에게 적합한 접근 권한이 있는지 확인한다.


데이터 사전은 DB 생성 과정중 catalog.sql 스크립트를 수행하는 과정에서 생성되고, 모든 데이터 사전 정보는 SYSTEM 테이블 스페이스에 저장된다.



2. 데이터 사전에 저장되는 내용

1) 오라클의 사용자 정보

2) 오라클 권한, 롤 정보

3) DB 스키마 객체 정보 (ex. table, view, index, cluster, synonym, sequence 등..)

4) 무결성 제약 조건에 관한 정보

5) 오라클 DB의 함수 / 프로시저, 트리거에 관한 정보

6) 가장 일반적인 DB 정보



3. 종류

 종류

 설명

 USER_

 사용자가 소유한 객체에 관한 정보 저장

 ALL_

 사용자에게 액세스가 허용된 객체에 관한 정보 저장

 DBA_

 DBA 권한을 가진 사용자가 액세스 가능한 정보를 저장

 V$

 서버 성능과 Locking 정보를 저장. 일반적으로 DBA한테만 허용됨.



4. 기타 뷰

 종류

설명

 DICTIONARY

 모든 데이터 사전 테이블.

 뷰, 동의어가 저장되어 있다.

 TABLE_PRIVILEAGES

 사용자가 권한을 부여했거나, 부여받은 Object에 대한 권한을 표기한다.

 IND

 USER_INDEXS 동의어


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
-- "XXXX월 XX월 X째주"를 출력하는 쿼리.
-- 단, 이전달과 다음달이 이어지는 마지막 주의 경우, 평일 5일중 3일 이상이 속해있는 달로 치환되어야 하는 경우.
-- (ex. '2017-12-01' => 2017년 11월 5째주 / '2015-01-01' => 2014년 12월 5째주 로 출력되어야 함)
--
--
-- 무조건 평일 5일중 3일 이상이 속해있는 달로 치환되어야 하기 때문에, 어떤 날짜를 파라미터로 넣어도
-- 그 날짜가 속해있는 목요일의 날짜를 뽑도록 하여 기준을 잡았다.
-- => ㄱ) 해당 날짜가 속해있는 수요일의 날짜가 (DD가) 2보다 작을 때 (다음 달이 될 날짜들이 평일 5일중 3일 이상일 때)
--          다음 달의 첫번째 주차 (1주차)로 끼워넣음 
SELECT
    YYYYMM || JJA || '째주' AS WEEKLY_DT
FROM (SELECT
        CASE
            WHEN TO_CHAR(TODAY_DATE, 'DD'< 02
            THEN SUBSTR(TO_CHAR(ADD_MONTHS(TODAY_DATE, -1), 'YYYY-MM-DD'), 04|| '년 ' || SUBSTR(TO_CHAR(ADD_MONTHS(TODAY_DATE, -1), 'YYYYMMDD'), 52|| '월 '
            ELSE SUBSTR(TO_CHAR(TODAY_DATE, 'YYYY-MM-DD'), 04|| '년 ' || SUBSTR(TO_CHAR(TODAY_DATE, 'YYYYMMDD'), 52|| '월 '
        END AS YYYYMM,
        CASE
            WHEN TO_CHAR(TODAY_DATE, 'DD'< 02
            THEN TO_CHAR(TRUNC(TODAY_DATE -1'IW'), 'W')
            ELSE TO_CHAR(TODAY_DATE, 'W')
        END AS JJA
          -- 그 날짜가 속해있는 목요일의 날짜를 뽑는 쿼리
        FROM (SELECT
                TRUNC(TO_DATE(#params#, 'YYYY-MM-DD'), 'IW'+ LEVEL + 2 AS TODAY_DATE
            FROM
                DUAL
            CONNECT BY LEVEL <= 1
        ) WED_DAY
);
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
  DUAL.*,
  TO_CHAR(TO_DATE(DUAL.NEXT_DATE, 'YYYY-MM-DD'+ LEVEL - 1'DY') DAYDAY
FROM (
  SELECT
    CASE 
      WHEN TO_CHAR(TO_DATE('2017-12-12''YYYY-MM-DD'), 'D'= '1'
      THEN TO_CHAR(TO_DATE('2017-12-12''YYYY-MM-DD'+ 1'YYYY-MM-DD')
      WHEN TO_CHAR(TO_DATE('2017-12-12''YYYY-MM-DD'), 'D'= '6'
      THEN TO_CHAR(TO_DATE('2017-12-12''YYYY-MM-DD'+ 3'YYY-MM-DD')
      ELSE TO_CHAR(TO_DATE('2017-12-12''YYYY-MM-DD'+ 1'YYYY-MM-DD')
    END AS NEXT_DATE
  FROM
    DUAL
  ) DUAL
CONNECT BY LEVEL <= 1;
cs

파라미터로 입력되는 날짜의 요일이 금요일일 경우, 다음주 월요일의 날짜와 요일을 출력한다.

+ Recent posts