SQL
-
트리거(trigger)SQL/PL. SQL 2020. 4. 25. 13:41
트리거란? 테이블에 어떤 이벤트가 발생했을 때, 자동으로 사용자가 정의한 PL/SQL 명령을 실행 할 수 있는 구문 트리거 Syntax CREATE OR REPLACE TRIGGER 트리거명 [BEFORE | AFTER] EVENT(INSERT, DELETE, UPDATE 등) ON 테이블명 FOR EACH ROW // 행 트리거 DECLARE AFTER_CODE VARCHAR2(5); // 선언부(사용할 변수 선언) BEGIN IF INSERTING THEN SELECT 변환 후 코드 값 INTO AFTER_CODE FROM 코드 매핑 테이블 WHERE 변환전 코드 값 := NEW.코드 컬럼 INSERT INTO 로그 테이블명( 컬럼명1, 컬럼명2, ..., 컬럼명N) VALUES ( VALUES1, ..
-
반정규화SQL 2020. 3. 2. 01:24
반정규화란? - 정규화된 엔티티, 속성, 관계에 대해 시스템의 성능향상과 개발, 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법 협의의 반정규화란? 데이터를 중복하여 성능을 향상시키기 위한 기법 넓은 의미의 반정규화란? 데이터를 중복하여 성능을 향상시키기 위한 기법 언제 사용? 1. 정규화만을 수행하여 엔터티의 개수가 증가하고 관계가 많아져 일부 여러 개의 조인이 걸려야만 데이터를 가져오는 경우 2. 정규화의 함수적 종속관계는 위반하지 않지만 데이터의 중복성을 증가시켜야만 데이터 조회의 성능을 향상시키는 경우 사용하는 이유? 데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크 I/O양이 많아서 성능이 저하되거나 ..
-
PL/SQL PACKAGESQL/PL. SQL 2020. 2. 25. 20:40
PL/SQL PACKAGE 사용방법을 예제로 배워보자! - getEmpName, getDeptName 함수 두개를 NAMES 패키지에 담는다 create or replace package names as function getempname(p_empno emp.empno%type) return varchar2; function getdeptname(p_deptno dept.deptno%type) return varchar2; end names; / create or replace package body names as function getdeptname(p_deptno dept.deptno%type) return varchar2 as v_dname dept.dname%type; begin select ..
-
PL/SQL FUNCTIONSQL/PL. SQL 2020. 2. 25. 20:38
PL/SQL FUNCTION - 부서번호를 인자로 받고 부서명을 리턴해주는 함수 생성 - getDeptName CREATE OR REPLACE FUNCTION getDeptName(p_deptno dept.deptno%TYPE) RETURN VARCHAR2 IS v_dname dept.dname%TYPE; BEGIN SELECT dname INTO v_dname FROM dept WHERE deptno = p_deptno; RETURN v_dname; END; / - 직원번호를 인자로 받고 해당 직원의 이름을 리턴해주는 함수 생성 - getEmpName CREATE OR REPLACE FUNCTION getEmpName(p_empno emp.empno%TYPE) RETURN VARCHAR2 IS v_en..
-
PL/SQL 예외처리(EXCEPTION)SQL/PL. SQL 2020. 2. 25. 20:28
PL/SQL 예외처리(EXCEPTION) 실습으로 배워보자 ! DECLARE no_emp EXCEPTION; v_ename emp.ename%TYPE; BEGIN BEGIN SELECT ename INTO v_ename FROM emp WHERE empno = 8000; EXCEPTION WHEN NO_DATA_FOUND RAISE no_emp; END; EXCEPTION WHEN no_emp THEN DBMS_OUTPUT.PUT_LINE('no_emp'); END; /
-
PL/SQL 날짜에 따른 애음주기 쿼리 조회 실습SQL/PL. SQL 2020. 2. 25. 20:00
PL/SQL 날짜에 따른 애음주기 쿼리 조회 실습 CREATE or REPLACE PROCEDURE create_daily_sales(p_yyyym IN daily.dt%TYPE) IS --> p_yyyym을 인자(daily.dy 컬럼 타입)로 받는 create_daily_sales이름의 프로시저 생성 TYPE cal_row IS RECORD( --> dt, d 변수를 가지는 cal_row record 생성 dt VARCHAR2(8), d NUMBER ); TYPE cal_tab IS TABLE OF cal_row INDEX BY BINARY_INTEGER; v_cal_tab cal_tab; --> cal_row의 모든 컬럼의 데이터 타입을 가지는 cal_tab 테이블 타입 생성 BEGIN SELECT ..
-
커서 ( Cursor )SQL/PL. SQL 2020. 2. 24. 20:27
커서 (Cursor) - SQL문을 실행하기 위한 메모리 공간 -> 특정 SQL 문장을 처리한 결과를 담고 있는 영역을 가리키는 일종의 포인터 - 커서를 사용하면 처리된 SQL 문장 - 기존에 사용한 SQL 문은 묵시적 커서를 사용 종류 1. 묵시적(암시적) 커서 1) 오라클 내부에서 자동으로 생성되어 사용하는 커서 2) PL/SQL 블록에서 실행되는 문장 3) ( INSERT, UPDATE, MERGE, DELETE, SELECT INTO )가 실행될 때마다 자동으로 만들어져 사용 됌 4) 개발자 입장에서는 이러한 커서의 동작에 관여할 수 없음 5) 커서 속성을 이용하면 해당 커서에 대한 여러가지 정보를 알아낼 수 있음 * 묵시적 커서 속성 1) SQL%FOUND : 결과 집합의 패치 로우 수가 1개 ..
-
SQL문 처리과정SQL 2020. 2. 24. 19:53
SQL문 처리과정 서버 프로세스에 의해 PGA를 통해 수행 1. 구문분석 / 실행 계획 -> 2. 바인드 -> 3. 실행 -> 4. 인출(FETCH) 1. 구문분석 실행 계획 1) 공유 풀에서 동일한 실행 계획이 있는지 검색(커서 공유) * 실행 계획을 세우는 작업이 비용이 높기 때문에 재사용 할 수 있으면 하려고 * SQL 공유 -> 이미 수립된 실행 계획을 공유해서 재사용 (재사용 하려면 SQL 구문이 동일해야 함) * 동일한 SQL 문장이란? -> 1] 대소문자 가림 2] 공백도 동일해야함 3] 조회 결과가 같다고 동일한 SQL문이 아님 4] 주석도 영향을 미침 예제 - 다음의 SQL 문장들은 동일한 문장이 아님 select * FROM dept; SELECT * FROM dept; SELECT *..