본문 바로가기

[개발] Programming197

ora-01481: 숫자 형식 모델이 부적합합니다 해당 오라클 오류는 데이터 타입이 맞지 않아서 발생합니다. 아래 예를 보시면 TO_CHAR에 문자열 형식의 데이터를 인자로 넘겨줬지만, 이를 문자로 인식하지 않고 숫자로 인식해서 발생하는 오류입니다. TO_CHAR('20190827', 'YYYYMMDD') // 오류 발생 TO_CHAR(TO_DATE('20190827'), 'YYYYMMDD'), 'YYYYMMDD') // 오류 해결 1 2 SELECT TO_CHAR(TO_DATE('20190827', 'YYYYMMDD'), 'YYYYMMDD') AS TEST_DATE FROM DUAL ; Colored by Color Scripter cs 이 경우 TO_CHAR 함수에 넘겨주는 데이터 형식을 DATE 타입으로 바꾼 뒤에 넘기면 오류가 발생하지 않습니다... 2019. 8. 27.
오라클, 숫자에 콤마 넣는 방법 (TO_CHAR) 오라클 숫자에 콤마 넣기 컬럼명이 NUM_STR이고 데이터 타입이 문자일 경우 데이터는 '255500'라고 가정. 숫자 형식에 맞게 ','을 3자리마다 넣어 주기 위해서는 TO_CHAR 함수를 활용합니다. TO_CHAR(NUM_STR, '999,999,999') 결과 > 255,500 쿼리 적용 예시) SELECT TO_CHAR('255500', '999,999,999') AS PRICE FROM DUAL ; 결과 > 255,500 * 자리수를 의미하는 '999'는 숫자 크기의 최대 값을 고려해서 설정합니다. 해당 숫자 범위를 넘어가면 효과가 적용되지 않을 수 있기 때문입니다. 2019. 8. 11.
오라클, VARCHAR2 날짜를 원하는 포멧으로 변경하는 방법 날짜 포멧 변환 날짜 형식이 DATE라면 TO_DATE(SYSDATE, 'YYYY.MM.DD')로 간단하게 날짜 포멧을 지정할 수 있지만, VARCHAR2 형식의 날짜 데이터는 TO_DATE로 바로 원하는 포멧으로 지정할 순 없습니다. 만약 바로 TO_DATE를 적용하면 YYYY.MM.DD로 지정해도 이상하게 YY/MM/DD 형식이 되었습니다. 해결 방법은 VARCHAR 타입 날짜 데이터를 DATE 형식으로 변환해준 뒤, 다시 CHAR 형으로 포멧을 지정해주면 됩니다. 즉, TO_DATE 적용 후 TO_CHAR 함수를 적용해주면 됩니다. 예) 현재 날짜를 시분초를 제외하고 2019.08.08 형식으로 변경하고 싶은 경우 TO_CHAR(TO_DATE('20190808'), 'YYYY.MM.DD'), 'YY.. 2019. 8. 9.
오라클 MERGE INTO, INSERT와 UPDATE 한 번에 실행 MERGE INTO 개발을 하다 보면 수시로 INSERT와 UPDATE를 할 일이 발생합니다. 이때 오라클의 MERGE INTO 구문을 활용하면 조건에 해당되는 값이 있으면 UPDATE 없으면 INSERT를 한 구문으로 처리할 수 있습니다. 각각 중복 체크를 하고 INSERT나 UPDATE를 하는 것과 비교하면 상당히 유용한 구문이라고 할 수 있죠. 그럼 여러 예제를 통해 MERGE INTO를 사용하는 방법을 소개하겠습니다. 1. 테이블에서 조회하여 비교 후 저장 다음과 같은 테이블이 (TARGET_TABLE, DATA_TABLE) 있다고 가정하고 DATA_TABLE에서 조회하여 TARGET_TABLE에 입력하는 예시입니다. 데이터를 비교할 컬럼은 'COL_KEY', 입력할 컬럼은 'COL_VAL'로 하.. 2019. 8. 2.
오라클 날짜(DATE) 비교, to_date, to_char 함수 오라클 날짜 타입 비교 오라클 쿼리를 작성하다 보면 날짜를 비교하는 케이스가 많이 발생합니다. 문제는 이 날짜 타입이 string인 경우와 date 타입인 경우가 있어서 형변환을 해줘야 된다는 것입니다. 왜냐하면 date 타입인 경우 string 타입과 직접 비교가 안되기 때문입니다. 1. string형 날짜 비교 날짜를 문자형 형태로 비교하기 위해서는 date 타입을 string으로 변환해줍니다. 오라클의 TO_CHAR() 함수를 이용하면 문자형으로 변환이 가능하죠. (* 12시간재로 비교할 경우 24를 12로 바꿔줍니다.) TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') 결과 > 20190731034515 예) 20190731 > 오늘 비교 1 2 3 4 SELECT DUMMY FR.. 2019. 7. 31.
자바 Cannot invoke compareTo(int) on the primitive type int 자바에서 .compareTo() 메소드를 사용하려니 발생한 오류. 'Cannot invoke compareTo(int) on the primitive type int' 원인: primitive type은 클래스가 아니라 메소드를 호출할 수 없는데, 호출을 시도했기 때문. 오류가 발생하는 소스 1 2 3 4 5 6 7 8 9 // 숫자를 입력할 수 있는 vo가 있다고 가정 NumVo vo = new NumVo(); vo.setNumA(1); vo.setNumB(1); int result = vo.getNumA().compareTo(vo.getNumB()); // 결과: compareTo에서 오류 발생 Colored by Color Scripter cs 오류를 해결하기 위해서는 2가지 해결 방법이 있다. 1.. 2019. 7. 11.
자바 BigDecimal to int, 값 비교하는 방법 오라클에서 COUNT를 사용하면 해당 컬럼의 데이터 타입은 bigdecimal로 리턴된다. 그렇게 되면 해당 값으로 컨트롤러 단에서 int 값과 바로 비교할 수 없게 된다. 이 경우 우선 bigdecimal의 int 값을 구해서 비교를 해주면 해결된다. 사용 함수: intValue(); 예시, 1 2 3 testVo vo = new TestVo(); tmp = vo.getCnt(); cs 데이터 세트 testVo에 cnt라는 bigdecimal 변수가 있다고 가정, 이 값이 int 형인 0보다 큰지 비교하고 싶은 경우. cnt의 int 값을 구해야 된다. 아래 예제를 보면 첫 번째 if 조건문에서는 타입이 일치하지 않아 오류가 발생하며, 두 번째 if 조건문의 경우 bigdecimal을 int로 변환하였.. 2019. 6. 12.
ora-01843: not a valid month, 지정한 월이 부적합합니다. ora-01843 오류 : 오라클에서 위 오류는 날짜 포맷을 잘못 입력한 경우 발생. 영어로는 'not a valid month', 한글로는 '지정한 월이 부적합합니다.' 처음에는 월이 무슨 말인가 했는데, 생각해보니 月을 의미하고 있었습니다. 원인은 TO_DATE() 함수를 사용하는데 잘못된 데이터가 들어오고 있었기 때문입니다. 예를 들면 아래와 같은 경우 날짜가 형식에 맞지 않아 오류가 발생합니다. 1 2 3 SELECT TO_DATE('2190101', 'YYYY-MM-DD') AS DATE FROM TEST_TABLE ; Colored by Color Scripter cs 알고 보니 년도에 0이 하나 빠져있었습니다. '20190101'로 수정하면 더 이상 오류가 발생하지 않습니다. 1 2 3 SE.. 2019. 6. 1.
ora-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다. 오류 ora-01427 오류 오라클에서 하나의 값이 리턴되어야 하는데, 2개 이상의 값이 리턴되면 발생하는 오류. 몇 가지 케이스를 예로 들면, 1. 오라클 함수 null 체크를 할 수 있는 NVL() 함수를 사용할 때 리턴되는 값이 둘 이상이면 발생. 해결 방법은 하나의 값만 리턴하게 만드는 방법 밖에는 없다. 2. WHERE 조건 쿼리에서 WHERE에 비교하는 경우 '='을 사용하면 하나의 값만 비교가 가능함. 근데 만약 2개 이상의 값을 입력하는 경우 오류가 발생. 1 2 3 4 SELECT * FROM TEST_TABLE_A WHERE NAME = (SELECT NAME FROM TEST_TABLE_B) Colored by Color Scripter cs 이때 WHERE 조건에 있는 'SELECT NA.. 2019. 5. 28.