오라클에서 인덱스를 수정하기 위해서는 ALTER INDEX 문을 사용하면 된다. ALTER INDEX 문을 사용하여 인덱스명 변경(RENAME), 비활성화(UNUSABLE), 재구축(REBUILD)을 할 수 있다. 그러나 인덱스 컬럼을 변경하기 위해서는 인덱스를 삭제 후 다시 생성하는 방법을 사용해야 한다. 인덱스 수정 인덱스 컬럼 추가 및 변경 -- 인덱스 삭제 DROP INDEX emp_ix01; -- 인덱스 재생성 CREATE INDEX emp_ix01 ON emp(hiredate, job); 오라클은 ALTER INDEX 문을 사용해서 인덱스 컬럼을 변경하지 못한다. 인덱스의 컬럼을 추가, 제거 또는 순서를 변경하기 위해서는 인덱스를 삭제(DROP)하고 다시 생성(CREATE) 해야 한다. 인덱스..
오라클에서는 다양한 종류의 인덱스를 생성해서 사용할 수 있다. B-트리 인덱스, 비트맵 인덱스, 파티션 인덱스, 함수 인덱스, 도메인 인덱스를 생성할 수 있으며, 아래는 가장 많이 사용하는 B-트리 인덱스(일반 인덱스)를 생성하는 방법이다. CREATE [UNIQUE] INDEX [스키마명.]인덱스명 ON [스키마명.]테이블명 (컬럼1 [, 컬럼2, 컬럼3, ...]) 대괄호([]) 항목은 생략이 가능하다. 인덱스는 한 개 이상의 컬럼으로 만들 수 있으며, 하나의 테이블에 여러 개의 인덱스를 생성할 수 있다. 테이블에 인덱스가 많이 생성되어 있으면, SELECT는 빠를 수 있지만 데이터 변경(INSERT, UPDATE, DELETE)은 느려질 수 있으므로 주의해야 한다. 인덱스 생성 단일 인덱스 생성 (..
오라클에서 테이블의 데이터를 삭제하기 위해서는 DELETE 문을 사용하면 된다. WHERE 절의 조건에 해당하는 모든 데이터가 삭제된다. 조건에 맞는 데이터가 여러 개인 경우 모두 삭제되니 주의해서 사용해야 한다. DELETE 문이 수행된 이후 COMMIT 되면 복구가 쉽지 않다. Flashback을 활용하여 일부 데이터를 복구할 수도 있으니 아래를 참고하면 된다. 기본 사용법 DELETE FROM emp WHERE empno = 7788 emp 테이블에서 empno의 값이 7788인 데이터를 삭제한다. DELETE emp WHERE job = 'ANALYST' AND deptno = 20 FROM 키워드를 생략해도 DELETE 문은 정상적으로 수행된다. 되도록이면 FROM 키워드를 생략하지 않고 작성하..
오라클에서 테이블의 값을 수정하기 위해서는 UPDATE 문을 사용하면 된다. WHERE 절에 해당하는 행이 여러 개인 경우 한 번에 여러 건의 행이 SET 절의 값으로 변경된다. UPDATE 문은 시스템 운영 시 자주 사용하므로 다양한 방법을 익혀두는 것이 좋다. 기본 사용법 UPDATE emp SET job = 'MANAGER' , deptno = 20 WHERE empno = 7566 위는 WHERE 절의 empno에 해당하는 데이터의 job, deptno 컬럼을 수정하는 쿼리이다. empno는 PK이기 때문에 한건의 데이터만 수정되지만 PK가 아니고 여러 건이 조회되면 여러 건의 데이터가 한 번에 수정된다. SET 절에 서브쿼리 사용법 UPDATE emp a SET a.sal = (SELECT MA..
오라클에서 테이블에 데이터를 입력할 때는 INSERT 문을 사용하면 된다. INSERT 문은 SQL의 아주 기본이지만 상황에 따라서 다양한 방법으로 사용할 수 있으니, 아래를 예제를 참고하면 앞으로 INSERT 문의 활용에 도움이 될 것이다. 기본 사용법 1 INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, NULL, 20) INTO 절의 컬럼 개수와 데이터 타입이 VALUES 절의 컬럼 개수와 데이터 타입이 동일해야 한다. VALUES 절에 테이블의 모든 컬럼이 나열되어 있다면, INTO 절의 컬럼을 생략할 수 있지만, I..
오라클에서 쿼리문을 작성하다 보면, 하나의 쿼리문으로 INSERT, UPDATE, DELETE 작업을 해야 하는 경우가 있다. 이럴 때에는 MERGE 문을 사용하면 간단하게 쿼리문을 작성할 수 있다. 오라클 9i부터 MERGE 문을 사용할 수 있으며, DELETE 절은 10g부터 사용할 수 있다. 단일 테이블 사용법 (DUAL) MERGE INTO emp a USING dual ON (a.empno = 7788) WHEN MATCHED THEN UPDATE SET a.deptno = 20 WHEN NOT MATCHED THEN INSERT (a.empno, a.ename, a.deptno) VALUES (7788, 'SCOTT', 20); 단일(자신의) 테이블에 MERGE 문은 자주 사용하므로 꼭 기억해..
오라클에서 날짜 및 시간의 차이를 계산하기 위해서는 수치를 계산하듯 종료일자에서 시작일자를 빼주면 된다. MSSQL에서는 DATEDIFF 함수를 사용하지만 오라클에서는 별도의 함수는 없다. 날짜 차이 : 종료일자(YYYY-MM-DD) - 시작일자(YYYY-MM-DD) 시간 차이 : (종료일시(YYYY-MM-DD HH:MI:SS) - 시작일시(YYYY-MM-DD HH:MI:SS)) * 24 분 차이 : (종료일시(YYYY-MM-DD HH:MI:SS) - 시작일시(YYYY-MM-DD HH:MI:SS)) * 24 * 60 초 차이 : (종료일시(YYYY-MM-DD HH:MI:SS) - 시작일시(YYYY-MM-DD HH:MI:SS)) * 24 * 60 * 60 종료일자에서 시작일자를 빼면 차이 값이 일 기준의 ..
오라클에서 쿼리문을 작성할 때 SELECT INSERT를 사용해야 할 경우가 많다. 기본 자료를 조회 후 전달받은 인자 값과 결합하여 INSERT 하거나, 이력 데이터를 저장할 때 자주 사용한다. SELECT INSERT의 경우 한 번의 호출로 여러 행을 입력할 수 있어서 다양하게 활용이 가능하다. SELECT 절의 컬럼과 INSERT 테이블의 칼럼이 일치하는 경우 INSERT INTO emp SELECT 8000 , 'GENT' , a.job , a.mgr , TO_DATE('2021-05-03', 'YYYY-MM-DD') , a.sal , a.comm , a.deptno FROM emp a WHERE empno = 7698 SELECT 절의 컬럼 개수와 형식이 emp 테이블과 일치할 경우, emp 테..
오라클 SQL에서 LIKE 연산자는 자주 사용하는 구문 중 하나이다. 문자열에서 와일드카드(%)를 사용하여 원하는 문자가 포함된 자료를 쉽게 검색할 수 있다. 단순 검색 외에도 대문자 소문자 구분 없이 검색, NOT 연산자 사용, 여러 개의 문자를 검색, 언더바(_)를 사용하여 자릿수 검색 등 다양한 사용법이 있으니 아래를 참고하기 바란다. 기본 사용법 "SC"로 시작하는 이름 검색 SELECT * FROM emp WHERE ename LIKE 'SC%' "SC"로 시작하는 이름을 검색한다. 와일드카드(%) 자리에는 어떠한 문자가 존재해도 상관없다. "ER"로 끝나는 이름 검색 SELECT * FROM emp WHERE ename LIKE '%ER' "ER"로 끝나는 이름을 검색한다. "AM"을 포함하고..
오라클에서 쿼리문을 작성할 때 스키마명(소유자명)을 붙이지 않고 테이블을 사용하고 있다면 해당 테이블의 시노님을 사용하고 있는 것이다. 시노님(Synonym)의 뜻은 동의어이며 일종의 별칭이라고 생각하면 된다. 시노님은 Table, View, Procedure, Function, Sequence 등의 오라클 오브젝트에 사용 가능하다. ① OR REPLACE : 시노님을 수정할 때 DROP 하지 않고 기존 생성 쿼리를 사용하여 수정할 수 있다. ② PUBLIC : PUBLIC를 생략하면 PRIVATE로 시노님이 생성된다. ③ [스키마명].시노님명 : 자신의 계정에서 시노님을 생성할 경우 [스키마명]은 생략이 가능하며, 타 계정에서 시노님을 생성해 줄 경우 명시해야 한다. PUBLIC과 PRIVATE 차이 ..