오라클에서 GREATEST 함수는 최대값, LEAST 함수는 최소값을 반환하는 함수이다. MAX, MIN 함수와 차이점은 서로다른 컬럼의 값을 비교한다는 것이다. 같은 행(Row)에서 서로다른 컬럼의 값을 비교하여 최댓값 또는 최솟값을 반환한다. 함수의 인자 개수는 무한대 수준으로 입력이 가능하다. GREATEST("값1", "값2", "값3", "값4", "값5", "값6", ...) 인자값 중 최댓값을 반환 LEAST("값1", "값2", "값3", "값4", "값5", "값6", ...) 인자값 중 최솟값을 반환 최댓값을 반환 (GREATEST) SELECT GREATEST(100, 200, 300, 400, 500) FROM dual --결과: 500 최솟값을 반환 (LEAST) SELECT LE..
오라클에서 쿼리문을 작성할 때 TO_CHAR() 함수는 날짜, 숫자 등의 값을 문자열로 변환하는 함수이다. 자주 사용하는 기본 함수이므로 아래의 다양한 변환 방법을 알고 있으면 많은 도움이 된다. 날짜 포맷 변경 (YYYY-MM-DD) SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') --20200723 , TO_CHAR(SYSDATE, 'YYYY/MM/DD') --2020/07/23 , TO_CHAR(SYSDATE, 'YYYY-MM-DD') --2020-07-23 , TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') --2020-07-23 11:10:52 FROM dual YYYY: 년, MM: 월, DD: 일, HH24: 24시간, HH: 12시간, MI: 분,..
오라클 프로시저를 만들어서 사용하다 보면 아래와 같은 오류가 발생할 수 있다. 오류가 발생하는 이유는 CURSOR 변수에 값이 할당되지 않은 상태에서 프로시저의 실행이 끝나면 발생한다. ORA-01023: 커서 문맥이 없습니다(부적합한 커서번호) 아래의 프로시저를 보면 out_cursor에 값이 할당되기 전에 프로시저의 실행이 중단될 수 있기 때문에 주의해야 한다. CURSOR에 값이 할당되기 전에 프로시저의 실행이 중단된다면 오류가 발생한다. 커서(CURSOR)에 값이 할당되기 전에 RETURN이 되는 부분이 있는지 확인해 봐야 한다.
오라클에서 여러 행의 컬럼 값을 하나로 합치기 위해서는 XMLAGG(오라클 9i 이하), WM_CONCAT(오라클 10g~11g R1) 함수를 사용하였다. 오라클 11g R2 버전부터 WM_CONCAT 함수를 사용을 할 수 없으며 LISTAGG 함수를 사용해야 한다. (WM_CONCAT, XMLAGG 사용법) LISTAGG( ) 함수는 그룹 함수이기 때문에 GROUP BY 또는 PARTITION BY 절과 함께 사용해야 한다. WM_CONCAT 함수는 DISTINCT를 사용할 수 있으나, LISTAGG 함수는 사용할 수 없다. 그러나 정규식 함수를 사용하여 중복을 제거할 수 있으며 ORDER BY 절을 사용할 수 있어서 값의 정렬이 가능하다. LISTAGG([합칠 컬럼명], [구분자]) WITHIN GR..
오라클에서 컬럼을 변경 할 경우 ALTER TABLE를 사용하며, 컬럼의 데이터 타입, 길이를 수정할 때는 MODIFY, 컬럼명을 수정할 때는 RENAME COLUMN을 사용하면 된다. 컬럼 데이터 타입 변경 --데이터 타입 변경 : NUMBER(4) -> VARCHAR2(4) ALTER TABLE emp MODIFY editid VARCHAR2(4); ALTER TABLE [테이블명] MODIFY [컬럼명] [새로운 데이터타입(길이)] 데이터 타입을 변경해야 하는 경우 해당 컬럼의 값을 모두 지워야 변경이 가능하다. 컬럼 길이(크기) 변경 --데이터 길이(크기) 변경 : VARCHAR2(4) -> VARCHAR2(5) ALTER TABLE emp MODIFY editid VARCHAR2(5); ALTE..
오라클 테이블에 컬럼을 추가하기 위해서는 ALTER TABLE을 사용한다. 컬럼을 추가하면 테이블 컬럼의 마지막 순서에 추가가 되며, 컬럼 순서의 중간에 컬럼을 추가할 수는 없다. 오라클 12c 부터는 조금 쉽게 컬럼의 순서를 변경할 수 있도록 기능이 추가 되었으며, 이전 버전에서 컬럼 순서를 변경하기 위해서는 테이블을 재생성 해야 한다. 컬럼 추가, 삭제 --컬럼 추가 1 ALTER TABLE emp ADD email VARCHAR(25); --컬럼 추가 2 (기본 값, NOT NULL 지정) ALTER TABLE emp ADD email VARCHAR(25) DEFAULT 'test@test.com' NOT NULL; --컬럼 삭제 ALTER TABLE emp DROP COLUMN email; 컬럼 ..
오라클에서 테이블을 만들기 위해서는 CREATE TABLE을 사용하여 컬럼명, 데이터 타입을 정의하여 테이블을 생성하면 된다. 아래는 EMP(사원) 테이블을 만드는 예제이다. ① 테이블 명, ② 컬럼 명 - 테이블, 컬럼 명의 길이는 30byte 문자 (Oracle 12c R2 부터는 128byte) - 문자(영문, 한글), 숫자, 특수문자(_, $, #)만 가능 - 반드시 문자로 시작 ③ 데이터 타입 - NUMBER(4) : 4자리의 가변 길이 정수 - NUMBER(7,2) : 7자리의 가변 길이 정수와 2자리의 가변길이 소수 - VARCHAR2(10) : 10byte의 가변 길이 문자 ④ 기본 값 - 테이블에 값이 입력(INSERT) 될 때 값이 없으면 기본으로 생성되는 값 - DEFAULT [값(문..
오라클에서 AVG 함수를 사용하면 평균을 쉽게 구할 수 있다. 그러나 NULL 값을 처리하지 않으면 평균 값에 오류가 발생할 수 있으니 주의해야 한다. SELECT AVG(sal) FROM emp 평균을 구할 컬럼의 값에 NULL 값이 존재한다면 꼭 NVL 함수를 사용하여 NULL 값을 치환해야 한다. NULL 값을 치환하지 않으면 총합계÷총건수와 다른 결과가 조회된다. SELECT AVG(NVL(comm, 0)) AS avg1 , SUM(comm) / COUNT(*) AS avg2 FROM emp 오라클의 집계 함수는 NULL 값을 집계에서 제외하는 특성이 있다. AVG 함수는 SUM(comm) / COUNT(*) 와 동일한 기능을 수행한다. 급여(sal) 컬럼은 NULL 값이 없기 때문에 정상적으로 ..
오라클 쿼리를 작성하다 보면 수치값에 소수점이 존재하는지 또는 정수는 버리고 소수점 이하의 값만 잘라서 사용해야 할 때가 있다. 위의 상황을 한 번에 해결할 수 있는 함수가 없기 때문에 직접 연산을 해야 한다. 소수점 체크 - "컬럼" TRUNC("컬럼") - INSTR("컬럼", ".") > 0 소수점 이하 값 - "컬럼" - TRUNC("컬럼") 소수점 체크 방법 TRUNC( ) 함수를 이용하는 방법 수치 값에서 TRUNC 함수를 사용하여 소수점 이하를 버리고 동일한 값이면 소수점이 없다 WITH temp AS ( SELECT 1.25 AS num1 , 1.0 AS num2 , 0.25 AS num3 , 1 AS num4 FROM dual ) SELECT num1 --1.25 , num2 --1.0 ..
오라클에서 if 문과 비슷한 기능을 하는 DECODE 함수가 있다. 그러나 DECODE 함수는 조건이 많아지면 가독성이 떨어지고 복잡해지며, 가장 큰 문제는 오라클 SQL에서만 사용할 수 있는 비표준 함수이다. 오라클에서 DECODE 함수를 대체할 수 있는 기능이 CASE 표현식이며 가독성이 좋고 더 많은 기능을 제공한다. 조건이 복잡한 경우 DECODE 함수 보다 CASE 표현식을 사용할 것을 권장한다. If 문 방식 SELECT ename , deptno , CASE WHEN deptno = '10' THEN 'New York' WHEN deptno = '20' THEN 'Dallas' ELSE 'Unknown' END AS loc_name FROM emp WHERE job = 'MANAGER' CA..