Development/Etc 26

[Oracle] 만나이 구하기

보통 나이를 구할때, sql에서 생년월일을 가져온 후, java 단에서 가공하는 형식으로 많이 사용하였다. 이번에 요구사항으로 검색조건에 나이를 사용할 일이 있어서, sql 에서 구하도록 방법을 찾아보았고, 다음과 같은 방법을 찾을 수 있었다. SELECT TRUNC(MONTHS_BETWEEN(TRUNC(SYSDATE), TO_DATE('19000101','YYYYMMDD')) / 12) FROM DUAL 그런데, 꼭 날짜를 이상하게 넣는 사람들이 있어, 실행시 오류가 발생하는 경우가 확인되었다. 날짜 변환시에 오류가 발생하는 경우 이를 감지해서 회피하도록 다음과 같은 방법으로 조치하였다. SELECT DECODE(VALIDATE_CONVERSION(p.birth_date AS DATE, 'YYYYMMD..

Development/Etc 2024.01.16

[Oracle] CLOB 조회 - 매우 긴 문자열

오라클에서는 문자를 저장하는 VARCHAR2가 최대 4000자까지만 지원되어, 그 이상의 데이터는 CLOB에 저장을 하였다. 그런데, 이는 반대로 읽어올때도 문제가 되는데, 읽어올때도 4000자 이상은 읽어오지를 못하였다. 게다가 CLOB에 저장된 데이터는 평범하게 SELECT column 으로는 조회가 모두 되지 않아, 아래와 같이 조회하여야 했다. 방법1 SELECT DBMS_LOB.SUBSTR(col1, DBMS_LOB.GETLENGTH(col1)) FROM MyTable 그런데, 이때 col1의 크기가 4000을 넘어가면 또 에러가 발생한다. 위와 같이 방법을 찾아 진행했었는데, 해당 Query의 결과를 Java단에서 정상적으로 읽지를 못하였다. 방법2 그래서, Query는 기존 그대로 사용하여 ..

Development/Etc 2020.03.05

[Oracle] 여러 row 하나로 합치기

주로 MySql을 사용하다 오랜만에 Oracle을 사용하니 생각보다 불편한 점이 많았다. 이전에 Oracle에서 MySql로 넘어왔을때도 그랬었는데... 그중 여러 row를 하나의 Column으로 합칠때 찾아보니 Oracle 버전마다 방법이 모두 달라 정리해보기로 했다. 테스트는 9버전대에서 진행하였고, 10 이후 버전은 테스트를 못해봤지만 동작하리라 추측한다. SELECT type , SUBSTR(XMLAgg(XMLElement(x, ',', name) ORDER BY code).Extract('//text()'), 2) name_9i , wm_concat(name) name_10g , ListAgg(name, ',') WITHIN GROUP(ORDER BY code) name_11g FROM t GR..

Development/Etc 2020.03.05

git reset 으로 날린 내용 복구

개요 git 으로 소스관리를 하고 있는데, 중요한 작업(merge 등) 수행전에는 보통 stash 등을 사용해서 작업내용을 보존해놓고 작업을 진행하고 있다. 그런데 가끔씩 stash 를 까먹거나, brach merge 등으로 싹 날려먹는 경우가 있곤 했다. 작업양이 적으면야 상관없겠지만, commit 등을 잔뜩 만들어놓고 push 를 안한 상태에서 이런 일이 발생하면 아찔해진다. 해결 이런 경우 아래 명령어로 복구가 가능했다. git reflog git reset --hard 첫번째 명령어를 실행하면, 그간 수행해온 git 명령어들이 보여지며, 첫번째는 commit_id, 두번째가 commit-hash-id 이다. 이 commit-hash-id 를 통해 특정 작업 시점으로 되돌아갈 수 있다.

Development/Etc 2019.11.08

암호화/복호화

웹개발시 암호화는 로그인 비밀번호를 암호화하곤 하여 대부분 단방향으로만 암호화를 진행했었다. 그런데 간혹 양방향으로 암호화/복호화가 필요한 경우가 있어 별도의 Class로 이를 구현하였고 정리하고자 작성한다. package com.test.xxx; import java.io.UnsupportedEncodingException; import java.security.GeneralSecurityException; import java.security.Key; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec..

Development/Etc 2019.10.21

한달 날짜 조회

날짜를 조건으로 검색할 때, 특정날짜가 포함된 달을 검색할 때, 여러 방법이 있겠지만, 다음과 같이 검색할 수 있었다. _year, _mon 은 입력값SELECT *FROM TABLEWHERE date BETWEEN STR_TO_DATE(CONCAT(_year, CONCAT('-', CONCAT(_mon, '-01 00:00:00'))), '%Y-%m-%d %H:%i:%s') AND STR_TO_DATE(CONCAT(LAST_DAY(CONCAT(_year, CONCAT('-', CONCAT(_mon, '-01')))), ' 23:59:59'), '%Y-%m-%d %H:%i:%s')Procedure, Function 등에서 잘 써먹고 있는 방법이다.

Development/Etc 2019.01.10

ClassDiagram 자동생성

프로젝트 막바지에 클래스Diagram을 생성할 경우가 있다. (문서작업 몰아치기)찾아보니 간단하게 만들 수 있는 Plugin이 있었다.http://www.objectaid.com/update/currentEclipse에 해당 Plugin을 설치(Help > Install New Software)New ObjectAid UML Diagram 을 선택해서 파일을 생성한 후, Diagram을 생성할 Class들을 끌어다놓으면 자동으로 Diagram을 생성한다.해당 Diagram을 복사하던지 해서 사용하면 끝!

Development/Etc 2018.06.28