본문 바로가기

프로그래밍/이것저것 일하면서

(53)
오라클 PLS-00183 Too many bind variables 해결방법 오라클 PL/SQL 에러 - PLS-00183 발생 운영 중인 배치 프로그램에 다른 데이터베이스에서 데이터를 가져와 업데이트하는 이런 쿼리가 있었습니다. 일배치로 실행되며 등록/수정/삭제된 데이터를 PL/SQL BEGIN ~ END 사이에서 insert, update, delete문으로 만드는 동적 쿼리가 MyBatis로 작성되어 있었습니다. BEGIN UPDATE MY_TABLE SET COL1 = #{item.col1} , COL2 = #{item.col2} , COL3 = #{item.col3} , COL4 = #{item.col4} , COL5 = #{item.col5} -- .... 이런식으로 13개 WHERE COND1 = #{item.cond1} AND COND2 = #{item.cond2}..
IntelliJ에서 빈 줄이 들어가면 쿼리 인식이 안되는 경우(Feat. 오라클 dialect) IntelliJ를 4년째 사용해오고 있습니다. 그런데 언제부터인가 데이터베이스 콘솔에서 개행문자가 2번 이상 있는 경우에 쿼리 실행이 안되는 현상이 생겼습니다. -- 잘된다 select sysdate from dual; -- 빈 줄이 들어가면 쿼리 인식이 안된다 select sysdate from dual; 그래서 설정을 찾아보고 온갖 검색을 해봐도 못 찾아내다가, 우연히 해결방법을 발견하게 되어 기록해둡니다. 오류 증상 IntelliJ Database Console에서 빈 줄이 들어간 쿼리가 실행 안됨. 참고로 오라클 해결 방법 경고가 발생하는 곳에 마우스를 올리면 다음과 같은 dialog가 나타나는데요, "Change SQL dialect"를 선택합니다. Oracle을 선택합니다. Change Dia..
아이폰 사파리에서 이미지 새로고침 안될 때(Feat. 캡챠, Webkit 엔진) 로그인 페이지에 캡챠가 적용되어 있다. '새로고침'을 누르면 당연히 캡챠가 새로고침 되어야 한다. 물론 내가 할 땐 잘됐다. 그런데 테스트를 해보시더니 캡챠 문자열 새로고침이 안된다고 한다. "아이폰에서 안되요." 처리 프로세스 서버로 캡챠 새로고침을 요청한다. 이미지 element의 src attribute에 캡챠 이미지를 세팅한다. '/capcha/image' API 에서는 세션에 저장된 캡챠값을 이미지로 생성하여 반환한다. $.ajax('/captcha/refresh').done(function () { imgElement.attr('src', '/captcha/image'); }); 그런데 아이폰(=사파리=웹킷 엔진)에서는 이..
IntelliJ IDEA에서 gradle 2.2(혹은 2.x) 버전이 안될때 버전 주의사항 (The project uses Gradle 2.12 which is incompatible with IDEA running on Java 10 or newer.) Jetbrains의 IntelliJ IDEA(이하 IntelliJ) 2020부터는 gradle 3.0 이상을 요구합니다. 그래서 IntelliJ 2019.1 혹은 2019.3 등을 설치하여 해당 프로젝트를 열면 대부분 해결됩니다. 하지만 이 때에도 동작하지 않는 경우가 있습니다. 제 경우에는 이런 오류가 발생했습니다. The project uses Gradle 2.12 which is incompatible with IDEA running on Java 10 or newer. "프로젝트는 java 1.8로 세팅했는데 뭔소리야?" 그랬는데 사실 알고보니 이건 IntelliJ를 구동하는 자바 버전이 10 이상이라는 말이었습니다. 해결 방법 유일한 해결 방법은 Intellij를 실행하는 자바 버전을 낮추는 것..
프로그램 버그, 고치는 것만큼 중요한 버그 리포트 작성과 공유 오늘 특정 날짜에서만 발생하는 오라클 오류를 발견하게 되었는데요, 그 원인은 'NUMTOYMINTERVAL' 함수를 사용하여 날짜를 계산하던 중에 발생한 문제였습니다. 이 함수는 일반적으로 날짜와 시간 간격을 계산할 때 사용되는데, 이번에 발생한 문제는 sysdate에서 특정 년월을 더하거나 빼면서 문제가 있었습니다. 예를 들면 2월은 2월28일이 마지막 날인데, 1월31일에 sysdate + NUMTOYMINTERVAL(1, 'MONTH')를 실행하면 2월31일이라는 날짜가 존재하지 않으니 ORA-01839 오류가 발생하는 식이죠. 다행히 오래 걸리지 않아 원인은 바로 발견하였습니다. 어떤 데이터에서만 이 문제가 발생하는지 확인한 후, 'NUMTOYMINTERVAL&..
@Param 어노테이션, MyBatis와 Spring Data 헷갈리지 말자 org.springframework.data.repository.query.Param와 org.apache.ibatis.annotations.Param 어노테이션은 서로 다른 패키지에 있으며 다른 용도로 사용됩니다. org.springframework.data.repository.query.Param 어노테이션은 스프링 프레임워크에서 제공하는 Spring Data JPA와 같은 ORM(Object Relational Mapping) 프레임워크에서 사용됩니다. 이 어노테이션은 메소드의 파라미터 이름과 쿼리 매개 변수 이름을 매핑하기 위해 사용됩니다. 예를 들어, 다음과 같은 메소드가 있다고 가정해보겠습니다. @Repository public interface UserRepository extends Jpa..
[데이터베이스/오라클] 대량 insert 속도 개선 요즘 푸시 발송 속도 개선을 하고 있는데, FCM 발송 후 결과 저장이나 잘못된 토큰 삭제 처리에서 병목이 생기는 것을 확인하였다. 그래서 사용자의 푸시 '알림함'에 대량 insert 하는 부분을 개선하고자 오라클 다중 insert 속도를 개선하는 방법을 찾아보았다. ### 기존 INSERT INTO SOME_TABLE (col1, col2 ..) VALUES (#{val1}, #{val2} ..); ### 1차 수정 하나의 commit으로 처리될 수 있도록 묶었다. (참고로 spring + mybatis 사용하여 처리 중) 로컬 디비로 1000건 insert 테스트 시 26초가 나왔다. BEGIN INSERT INTO SOME_TABLE (col1, col2 ..) VALUES (#{val1}, #{v..
[데이터베이스] FK 쓸까, 말까? 오늘 외래키를 삭제한 이유 완성된 프로그램 솔루션을 납품하는 일은 언제나 커스터마이징과의 싸움입니다. 이 부분을 얼마나 줄일수 있냐에 따라 수익성이 달려 있다고 해도 과언이 아닙니다. 아무것도 없는 허허벌판에 공사를 하는 것은 오히려 쉬울 수 있습니다. 하지만 이미 복잡한 시스템과 체계를 갖추어 놓은 고객사에 납품을 할 때는 생각보다 많은 난관에 봉착하게 됩니다. 오늘은 고객사에서 오라클 데이터베이스의 외래키(FK, Foreign Key)를 삭제해달라는 요구를 받아 검토를 해보았습니다. 이유는 마이그레이션 이유인데요, 외래키를 써야하는 경우와 쓸 수 없는 경우에 대해 정리해보았습니다. 관계형 데이터베이스에서 외래키를 쓰는 & 쓰지 않는 경우 데이터베이스에서 외래키(Foreign Key)는 다른 테이블의 기본키(Primary Key..