네이버 클라우드 캠프/Oracle 7

[Oracle] Trigger

트리거 트리거는 DB 안의 특정한 상황이나 동작, 이벤트가 발생할 때 자동으로 실행되는 기능을 정의하는 서브 프로그램입니다. 트리거의 장점으로는 먼저 데이터 관련 다양한 작업에 필요한 PL/SQL을 여러개 작성는 수고로움을 줄입니다. 또한, 제약조건만으로 부족한 복잡한 데이터 규칙이 있다면 이를 정의할 수 있습니다. 마지막으로 데이터 변경과 관련된 일련의 정보를 기록할 수 있습니다. 기록하는 점으로 인해, 공유 데이터 관련 보안성, 안전성이 확보가 되고 오류가 발생하더라도 이전 데이터 기록을 통해 대처가 가능합니다. 다만 트리거는 주로 타 데이터 추가, 변경 작업이 일어나므로 마구잡이로 사용하면 DB의 성능이 하락할 것입니다. 그래서 용도를 제한할 필요가 있으며, 테이블부터 DB 전체에 대한 DML(IN..

[Oracle] Stored Sub Program: SF

Stored Function 저장된 함수(SF)는 프로시저와 동일한 역할을 하는 서브 프로그램입니다. 프로시저와 다른 점은 프로시저는 EXEC 명령어로 단독 호출할 수 있고, 다른 PL/SQL문에서"만" 실행 가능합니다만, 함수는 EXEC 단독 호출 및 PL/SQL 구문에서뿐만 아니라 쿼리문에서도 호출이 가능합니다. 또한, 프로시저의 파라미터는 다양한 모드(MODES)로 지정하지만 함수는 오직 IN 모드로만 사용할 수 있습니다. 또한, 프로시저는 OUT, IN OUT을 통해 여러개의 값을 리턴하지만 함수는 오직 하나의 리턴값만으로 RETURN문을 통해서 반환할 수 있습니다. 함수는 다음과 같이 생성합니다. CREATE OR REPLACE FUNCTION 함수명 ( 파라미터1 [IN] 자료형1, 파라미터2..

[Oracle] Stored Sub Program: SP

Stored Sub Program(저장 서브프로그램) 필요시 PL/SQL 호출해서 사용하고자 데이터베이스에 PL/SQL 구문을 저장해놓은 프로그램입니다. 이 프로그램은 Oracle에 저장해서 사용자간 공유하여 사용 가능하며, 메모리, 성능, 재사용성 측면에서 장점이 있습니다. 그 종류로는 SF(Stored Function), SP(Stored Prcedure), Trigger 등이 있습니다. Stored Procedure SP(저장 프로시저)는 오직 특정한 기능과 작업을 처리하고자 사용하는 서브 프로그램입니다. 쿼리문에서 호출이 안되고 오직 단독으로만 실행할 수 있습니다. 파라미터 여부에 따라 두가지로 나누어집니다. 1. 파라미터가 없는 프로시저 --프로시저의 선언 CREATE OR REPLACE PRO..

[Oracle] PL/SQL(2)

RECORD 레코드(RECORD)는 자바의 클래스와 동일합니다. 다양한 데이터 타입을 갖는 여러 변수를 갖는 자료형입니다. 데이터 타입은 VARCHAR2, NUMBER, DATE 등 다양하게 있습니다. 기본 데이터 타입과 테이블명.컬럼명%TYPE, 테이블명.ROW%TYPE 등 선언 가능합니다. "%TYPE"이라는 키워드를 기억합시다. 레코드의 선언방법 TYPE 레코드명 IS RECORD( 변수이름1 데이터타입[NOT NULL, DEFAULT]:=값 OR 수식; 변수이름2 테이블명.컬럼명%TYPE; .... ) 레코드가 다양한 데이터타입의 변수를 갖는 집합으로 볼 수 있고, Java의 class에서 메소드만 빠진 형태입니다. 순서가 있고 이를 파악하면 좋습니다. 레코드 선언 TYPE 레코드명 IS RECO..

[Oracle] PL/SQL (1)

PL/SQL PL/SQL(Procedural language extension to SQL) SQL 문장 안에서 변수를 만들고 조건처리, 반복처리(LOOP, WHILE, FOR)를 할 수 있는 오라클 자체 내장된 절차적인 언어입니다. PROCEDURE, FUNCTION, TRIGGER 등이 PL/SQL로 포함됩니다. PL/SQL의 장점 BLOCK 구조로 다수의 SQL문이 한번에 DB로 보낼 수 있으니, 처리속도가 향상됩니다. BLOCK 구조로 되어서 모듈화가 편합니다. 큰 BLOCK에 작은 BLOCK을 여러개 생성해서 다양하게 처리합니다. 단순하거나 복잡한 변수를 선언해서 사용할 수 있기 때문에 데이터를 계속 조회해야 하는 일이 적습니다. 예외처리가 가능하기 때문에 에러가 발생해도 다른 루틴을 생성해서 ..

[Oracle] 다중행 함수

다중행 함수 다중행 함수는 그룹화와 관련된 함수입니다. ROLLUP, CUBE, GROUPING SETS, PIVOT, UNPIVOT 등이 있습니다. 예를 들고자, EMP라는 테이블을 사용할 것입니다. 1. ROLLUP 이 함수는 GROUP BY절에 넣어서 사용할 수 있습니다. ROLLUP(그룹화 컬럼1, 그룹화 컬럼2 ...) 결과는 다음과 같습니다. 각각 마지막 컬럼 결과가 하나씩 제거된 그룹화 결과가 출력됩니다. 컬럼1별 컬럼2별 컬럼3별 ... 컬럼n별 결과 ... 컬럼1별 컬럼2별 컬럼3별 결과 컬럼1별 컬럼2별 결과 컬럼1별 결과 전체 데이터의 결과 예를 들어, EMP 테이블에서 ROLLUP 없이 부서번호, 업무별 통계를 내볼 수 있습니다. SELECT DNO , JOB , MAX(SAL) ,..

[Oracle] 다양한 팁들

WHERE과 ON의 상호 사용 --WHERE절로 빼도 되고, AND절로 바로 조건을 더 넣어도 된다!! Q1. 송강 교수가 강의하는 과목을 검색한다 ON절에 AND로 조건 추가 SELECT C.* , P.PNAME FROM COURSE C JOIN PROFESSOR P ON C.PNO = P.PNO AND P.PNAME = '송강'; ON절 뒤에 WHERE절로 조건 추가 SELECT C.* , P.PNAME FROM COURSE C JOIN PROFESSOR P ON C.PNO = P.PNO WHERE P.PNAME = '송강'; Q2. 화학과 1학년 학생이 수강하는 과목 검색 --DISTINCT로 하나씩만 출력하게 한다. --STUDENT에서는 가져오는 내용이 없어야 DISTINCT가 가능하다!!! S..