본문 바로가기

[개발] Programming/Database27

java.sql.SQLException: ORA-12899 열에 대한 값이 너무 큼 - 해결 방법 ORA-12899 오류 해결, 예방 방법 해당 오라클 오류는 '열에 대한 값이 너무 큼'이라고 친절하게 알려준다. 오라클 오류 중에 어쩌면 가장 쉽게 해결 가능한 오류인데, insert나 update할 테이블(오브젝트)의 칼럼보다 전달한 파라미터의 크기가 더 큰 경우에 발생한다. 1. 화면단에서 길이 제어 해결방법 중에 가장 쉬운 방법은 웹일 경우 화면단에서 데이터 길이를 미리 검사하는 것이다. 예1) 스크립트에서 길이를 검사하는 방법 var tmp = '검사할 데이터'; if(tmp.length > 제한할 길이){ alert("입력 길이가 너무 길어염."); return false; } 예2) input 태그에 maxlength를 설정해주는 방법 나이 : 이름 : 2. 컨트롤러 단에서 길이 제한 API.. 2020. 8. 22.
MySQL ON [PRIMARY] 의미 ON [PRIMARY] 란? 아래와 같은 테이블 생성 스키마가 있다고 하면, MySQL에서 'ON [PRIMARY]'라는 걸 볼 수 있다. CREATE TABLE TEST_TABLE ( ... ... ) ON [PRIMARY] ; MySql에서는 같은 디비의 같은 계정 내에서도 여러 저장소(파일그룹)를 지정하여 생성할 수 있다. 물리적으로 다른 파일 그룹일지라도 동일 저장소처럼 사용할 수 있다. 즉 같은 디비라도 서버의 다른 파일저장소에 디비 오브젝트를 위치시킬 수 있다. 하지만, 실제 업무를할 때 그렇게 설정한 적은 없음ㅎㅎ 거의 항상 디폴트 설정 ON [PRIMARY] 이며, 디폴트이다 보니 있던 없던 문제가 되지 않는다. 2020. 8. 18.
[MySQL] INT IDENTITY(N, M) - 시퀀스 함수 INT IDENTITY(N, M) 사용 방법 CREATE TABLE TEST_TABLE ( SEQ_NUM INT IDENTITY(1,1), USER_NAME varchar(30), USER_PHONE varchar(15), ); 2020. 8. 17.
오라클, 컬럼 명으로 테이블 찾는 방법 (ALL_TAB_COLUMNS) 간단한 쿼리문인데 가끔 까먹어서 정리해봤습니다. 기본 문법은 아래와 같습니다. 1 2 3 4 5 6 SELECT OWNER, TABLE_NAME, COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE COLUMN_NAME='컬럼 명' ; cs 예를 들어 컬럼 명은 'MEMBER_NAME'으로 알고 있는데, 해당 컬럼의 테이블 명을 모를 경우 아래와 같이 쿼리를 작성하면 됩니다. 1 2 3 4 5 6 SELECT OWNER, TABLE_NAME, COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE COLUMN_NAME='MEMBER_NAME' ; Colored by Color Scripter cs 만약 컬럼 명 중 일부만 알고 있을 경우에는 아래 쿼리 처럼 LIKE 문으로.. 2019. 10. 31.
오라클 LISTAGG, 여러 행을 하나의 컬럼으로 합치기 Oracle LISTAGG() LISTAGG()은 오라클 11g부터 지원하는 내장 함수입니다. 컬럼(아래)으로 나열되는 데이터를 로우(가로)로 나열하고 싶은 경우에 사용합니다. 즉, 리스트 형태로 나오던 데이터를 그루핑 할 때 유용합니다. 그럼 구체적으로 사용 방법을 알아보겠습니다. 기본 형태 기본적으로 LISTAGG 인자는 합칠 컬럼명과 구분자입니다. 구분자는 단순히 구분하기 위한 목적으로 아무 문자나 사용해도 됩니다. 1 2 3 SELECT LISTAGG(대상컬럼, 구분자) WITHIN GROUP (ORDER BY 정렬기준컬럼) FROM 테이블 ; Colored by Color Scripter cs SELECT 절에 LISTAGG 외에 컬럼을 표시하면 합칠 때 기준이 됩니다. 만약 LISTAGG만 사.. 2019. 9. 25.
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.