프로시저란?컴퓨터 프로그래밍에서 특정 작업을 수행하기 위해 일련의 명령어들을 모아놓은 것을 말한다. 이러한 명령어 집합은 하나의 단위로서 작동하며, 반복적으로 수행되어야 하는 작업들을 효율적으로 처리할 수 있게 해준다. 예를 들어, 다음과 같은 상황이 주어진 경우에 더 효율적으로 처리할 수 있다.상황 : SELECT 문을 한번 실행한 이후 그 결과에 따라 INSERT 또는 UPDATE 문을 실행할지 결정하는 코드를 구현해야 한다. 자바에서는 SELECT 문을 실행하고 결과를 DataSet 에 담아 if 문으로 실행해야한다. 프로시저를 이용하면 이러한 과정이 간소화된다. 하나의 프로시저 안에서 SELECT 문을 실행하고 결과를 변수에 담아 비교할 수 있다. 프로시저를 사용하면 DataSet에 결과를 담을..
DelimiterSQL에서 프로시저를 사용할때, DELIMITER 을 사용한다. Delimiter 명령어는 이러한 구문 문자를 정의하는 기능이다. 대부분의 데이터베이스에서는 구분자를 디폴트로 세미콜론(;)을 사용한다. 이는 문법의 끝을 나타내는 역할을 한다.사용법 :DELIMITER $$ Delimiter 을 사용하는 이유프로시저 내부의 SQL 문이 세미콜론으로 나뉘어진 여러 문장인 경우, 문장 구분이 어렵기 때문에 오류가 발생한다. 일련의 프로시저 전체가 아닌, 세미콜론에서 SQL이 나뉘어져 서버로 보내진다. 이러한 이유 때문에 하나의 프로시저 전체를 서버로 보내기 위해서는 DELIMITER 를 이용해 구분자를 재정의해줘야 한다. DELIMITER $$CREATE OR REPLACE DEFINER=`..
차장님이 내가 사용한 조인 말고 다른 조인을 사용하는 것이 더 좋다라고 말씀하셔서 할 번 정리할 필요성을 느꼈다. 쿼리를 작성할 때 정확한 조인 방식을 선택하고, 검색 조건을 좀 더 세세하게 걸어줘 성능을 향상시킬 것을 조언해주셨다. Join 이란서로 다른 두 테이블을 연관된 한 컬럼을 통해 연결하는 방법이다. 조인의 종류는 여러가지가 있으며, 각 조인은 데이터를 어떻게 결합하는지에 따라 차이가 있다. 각 조인의 선택은 데이터의 구조와 원하는 결과에 따라 달라질 수 있다. 실제 데이터와 조건에 맞는 조인 방법을 선택하여 원하는 결과를 얻을 수 있다.각 조인 구조를 아래의 테이블과 데이터로 예시를 들어보겠다.Inner Join (내부 조인)내부 조인은 두 개의 테이블에서 일치하는 행만을 선택하여 결과를 반..
SQL 에서 대소문자 구별없이 검색하고 싶을 경우UPPER(대상문자)LOWER(대상문자) UPPER / LOWER 을 사용하면 된다.UPPER 의 경우, 입력된 문자를 모두 대문자로 변경해주고LOWER 의 경우, 입력된 문자를 모두 소문자로 변경해준다. 때문에 대/소문자의 구별이 없어진다.
SQL 에서 coalesce 함수는 여러 개의 인자 중에서 NULL 이 아닌 첫 번째 값을 반환하는 역할을 하는 함수이다. 일반적으로 아래와 같은 형태로 사용한다. COALESE( value1, value2, ...) COALESE ( 'A', 'B', 'C', 'D') -> A COALESE ( NULL , 'B', 'C', 'D') -> B COALESE ( NULL, NULL, 'C', 'D') -> C COALESE ( NULL, NULL, NULL, NULL) -> NULL NULL 일 경우 값을 다른 값으로 변경하여 출력하는 것은 NVL 이다.
오라클에서 왼쪽, 오른쪽에 특정 문자를 채워서 문자열 길이를 맞출 때 사용한다. 지정한 자릿수보다 데이터의 길이가 작을 경우 나머지 공간을 특정 문자로 채운다. LPAD, 데이터의 자릿수, 빈 공간에 채울 문자(선택) RPAD, 데이터의 자릿수, 빈 공간에 채울 문자(선택) -- 빈 공간에 채울 문자를 지정하지 않으면, 공백문자로 띄운다. SELECT LPAD('empno', 7, '0') RPAD('empno', 7, '0') 만약 empno 의 값이 92001일 경우, 존재하는 데이터 값의 길이는 5이다. lpad, rpad 에서 지정한 데이터의 자릿수는 7이니 남은 빈공간 2는 ‘0’으로 채우게 된다. LPAD 의 경우 데이터의 왼쪽을 채운다. → 0092001 의 결과. RPAD 의 경우 데이터의..
원래 순서대로 작성해야하는데... 이미 늦었지만 SQL 기본구조를 정리해놓는게 좋을 것 같아 작성한다. 안쓰면 또 까먹기에.. 기본 쿼리 구조 SELECT SELECT 열1, 열2, ... FROM 테이블 WHERE 조건; SELECT : 조회할 컬럼 FROM : 조회할 테이블 WHERE : 조회 조건, 예를 들어, 어떤 컬럼의 데이터가 'people' 인 데이터들을 조회하고싶다면 아래와같이 작성하면 된다. WHERE column_nm = 'people' INSERT INSERT INTO 테이블 (열1, 열2, ...) VALUES (값1, 값2, ...); 열과 값의 순서를 일치시켜야 한다. 컬럼명을 따로 작성하지 않을경우, 전체 컬럼에 대해 값들이 들어간다. 컬럼명을 따로 작성하면 해당 컬럼에 값들이..
ORDER BY SQL에서 검색된 결과를 정렬하기 위해서는 ORDER BY 를 사용한다. SQL 문장의 가장 마지막에 사용하며, 정렬하고 싶은 컬럼에 ASC/DESC 를 사용해 입력한다. 입력하지 않을 경우 ASC 를 기본으로 한다. SELECT * FROM Customers ORDER BY LastName ASC; 여러개 사용할 경우 ',' comma 콤마로 연결해주면 된다. 그럼 적은 순서를 우선순위로 정렬된다. SELECT * FROM Customers ORDER BY A desc, B, C ASC
DB 풀을 닫을 때 나는 주로 close 를 사용했는데, freeConnection 도 있다는 것을 알게됐다. close() 와 freeConnection() 은 모두 연결을 종료하는 메서드이다. 하지만 사용되는 문맥에 따라 차이가 있다는 것을 알았는데, 구체적으로 알고 사용하고 싶어 정리해봤다. 커넥션을 닫아주거나 풀어주지 않으면 발생하는 문제 "Connection Pool Exception: Cannot get a connection, pool error Timeout waiting for idle object" 과 같은 문제가 발생할 수 있다. ⬇️문제해결방법 보러가기 Connection Pool Exception: Cannot get a connection, pool error Timeout wa..
너무 많은 커넥션 연결 때문에 발생하는 문제이다. Connection Pool Exception: Cannot get a connection, pool error Timeout waiting for idle object나는 서버 재실행으로 해결하는 편이다. 근본적인 문제는, 이전의 DB 연결을 종료하지 않아서 발생하는 문제이다. 자바 API 의 finally 에서 꼭 freeConnection 이나 close 를 사용해주면 된다. 근데 여기 프로젝트에는 파일 양이 많아 일일이 수정할 수 없기 때문에 서버 restart 로 해결해준다. 나의 경우엔 거의 3~4시간에 한번 꼴로 발생하는 듯하다 ㅜㅜ 테스트 돌리다 중요한 순간에 걸리면 쥔짜 짜증남 .. + 시니어 개발자분이 해결해주셨다. 제일 많이 쓰는 화면..