ORACLE - AUTO_INCREMENT 기능 구현
·
개발/ORACLE
SQL에서 테이블 생성 시 PK로 사용하는 컬럼은 대게 자동 증가(Auto Increment)를 사용한다. MySQL에서 테이블 생성시 PK에 Auto_Increment를 사용하면 되지만 오라클에는 없기 때문에 시퀀스와 트리거를 조합해 기능을 구현할 수 있다.12c 이상에서는 IDENTITY 컬럼을 사용할 수 있다.1. 시퀀스시퀀스 생성CREATE SEQUENCE my_sequence START WITH 1 -- 시작 값 INCREMENT BY 1 -- 증가 값 NOCACHE -- 캐싱 안 함 (안정성 위해) NOCYCLE; -- 최댓값 도달 시 다시 시작 안 함 시퀀스를 사용하여 INSERTINSERT INTO my_table (id, name) ..
ORACLE - ORA-25156 ANSI 조인, (+)
·
개발/ORACLE
ORA-25156old style outer join (+) cannot be used with ANSI joins[99999][25156] ORA-25156: 이전 방식의 포괄 조인(+)은 ANSI 조인과 함께 사용할 수 없음 Position: 8860 위 에러는 ANSI 조인과 (+) 를 같이 사용하면 나는 에러다.ANSI는 ANSI끼리(+)는 (+)끼리 사용하면 된다. 되도록이면 ANSI를 사용하는게 좋다.(+)는 OUTER JOIN 으로 바꾸자
Oracle 인덱스
·
개발/ORACLE
인덱스 란데이터를 보다 빠르게 검색할 수 있도록 도와준다.아무 옵션 없이 인덱스를 생성하게 되면 B-Tree 인덱스로 생성된다.프라이머리 키나 유니크에 의해 자동으로 생성되는 인덱스(자동 인덱스)와 수동으로 만드는 인덱스가 있다.인덱스 명은 중복이 안된다. (mysql에서는 중복 name이 되었는데 오라클은 안되더라) 인덱스 생성 시 고려할 점인덱스 선정 기준큰 테이블에서 적은 양의 데이터를 조회할 때 (통상 15% 이내)where 절이나 join, order by 에서 자주 사용되는 컬럼Null 값이 많이 포함된 컬럼 인덱스 주의 사항테이블의 데이터가 적거나 결과가 15%를 초과한다면 오히려 성능이 떨어짐수정, 삭제, 생성이 많은 테이블은 생성하지 않는 게 좋음부정형 비교 ('!=', 'NOT IN')..
Oracle From 절에 2개 이상의 테이블 JOIN, (+)
·
개발/ORACLE
A 테이블의 데이터 221개B 테이블의 데이터 101개중복 데이터 100개라고 가정하겠다. SELECT count(*)FROM A, B-- count(*) = 22,321FROM 절에 두개의 테이블을 아무조건없이 명시하면 221*101 이 이루어진다.만약 테이블이 3개라면 A * B * C 가 되어 무수히 많은 데이터가 만들어진다. SELECT count(*)FROM A, BWHERE A.pk=B.pk;-- count(*) = 100SELECT count(*)FROM A JOIN B ON A.pk=B.pk;SELECT count(*)FROM A INNER JOIN B ON A.pk=B.pk;WHERE 절에 조건을 주면 A와 B의 교집합, 즉 같은 값만 가져오고표준 ANSI 문법으로 JOIN 하면 동일한 ..
Oracle install 19c
·
개발/ORACLE
다운로드오라클 다운로드 Database Software Downloads | Oracle 대한민국Oracle Database Software Downloads Whether you are a developer, a data scientist, a DBA, an educator, or just interested in databases, Oracle Database 23ai is the ideal way to get started. It provides native support for all modern data types, analytics, anwww.oracle.com오라클 사이트에 접속해서 해당 플랫폼에 맞춰 다운로드 받으면 된다.윈도우와 리눅스 외에도 많은 플랫폼에 맞춰 다운로드 받을 수 있다...
Oracle의 V$RESOURCE_LIMIT과 process / session
·
개발/ORACLE
V$RESOURCE_LIMITV$RESOURCE_LIMIT이란? V$RESOURCE_LIMIT은 리소스 사용 정보를 표시하는 뷰.이 뷰를 사용하여 리소스 소비를 모니터링하고 필요한 경우 수정 조치를 취할 수 있다. 컬럼의 정의ColumnDataTypeDesciptionRESOURCE_NAMEVARCHAR2 (128)리소스의 이름CURRENT_UTILIZATIONNUMBER현재 사용 중인 리소스나 프로세스의 수MAX_UTILIZATIONNUMBER인스턴스 시작 이후 리소스의 최대 소비량INITIAL_ALLOCATIONVARCHAR2 (40)초기 할당량 (무제한 할당은 UNLIMITED)LIMIT_VALUEVARCHAR2 (40)제한 값 (초기 할당량보다 클수있음)CON_IDNUMBER컨테이너 id0: 전체..
Oracle 에서 explain plan 쿼리 계획
·
개발/ORACLE
Mysql에서 쿼리 튜닝을 위해 혹은 인덱스를 걸기 위해 자주 사용했던 explain.Oracle에서는 문법이 다른데 어떻게 다른지 사용법을 알아보자MysqlEXPLAINSELECT * FROM {table_name};-- update, insert, delete 문에도 확인 가능 Oracle-- 실행 계획 저장EXPLAIN PLAN SET STATEMENT_ID = '{PLAN value}' FORSELECT * FROM {table_name};-- 저장된 실행 계획 보기SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE','{PLAN value}','ALL')); Oracle 결과EXPLAIN PLAN SET STATEMENT_ID ='test' F..
Oracle 에서 limit 구현하기
·
개발/ORACLE
mysql 에서 oracle로 넘어오니 생각보다 많은게 다르다.보통 데이터를 볼때 부하를 조금이라도 더 줄이기 위해 10개 내지 필요한 만큼 잘라서 보기때문에 오라클로 넘어왔을때 limit을 하니 문법 오류가 났다.오라클에서 어떻게 하는지 알아보자MysqlSELECT * FROM {target_table}LIMIT 10; OracleSELECT *FROM ( SELECT * FROM {target_table} WHERE {조건문})WHERE rownum =1 AND rownum rownum은 오라클에서 제공하는 가상컬럼이고 추출하는 데이터의 순번을 부여하는 용도로 사용된다.rownum은 다시 다루겠다.