Oracle Procedure Function Trigger - accidentlywoo/sec GitHub Wiki

sql의 정리 먼저

내장 함수

  • 단일행함수 : 문자/숫자/날짜/형변환/NULL/일반함수
  • 여러행함수 : COUNT(), SUM(), AVG(), MIN(), MAX()

PL/SQL 사용자정의 함수

  • 반환값이 있는 함수 : FUNCTION
  • 반환값이 없는 함수 : PROCEDURE
  • 함수 내부에서 순차일처리가 가능 (변수활용, 조건처리, 반복처리)

PROCEDURE

구문 탐색!

CREATE OR REPLACE PROCEDURE 프로시저명([매개변수이름1 자료형, ...])
IS(또는 AS) [지역변수명1 자료형,] (지역변수 마다 ';'을 붙이기)
BEGIN
  프로시저가 할일 -> 여러가지 작업 쌉 가능!
  대입연산자 -> :=
  트랜잭션 완료 작업을 해야한다.
  dbms_output.put_line()-> 클라이언트 스크립트에 결과물을 찍어주는 함수.
  SELECT 구문을 사용하려면 제약조건이 있다.
END (프로시저명); 

매개변수/지역변수 자료형

  • 기본 자료형 : 숫자형, 문자형, 날짜형 [%type] COLUMN%type
  • 참조 자료형 : 컬럼 참조형, 레코드 참조형

프로시저에서 SELECT 구문

  SELECT pwd, name INTO vpwd, vname 
  FROM customer 
  WHERE id = 'id8';

반드시 INTO를 사용해서 지역변수로 담아서 출력해야하고, 일반적인 사용에서는 WHERE 절을 통해 단일 결과를 나오게 해야한다.(Scalar쿼리)

여러 행을 출력하려면 Cursor을 만들어야 한다.

프로시저에서 IF문

Trigger

CREATE OR REPLACE TRIGGER 트리거명
    [AFTER/BEFORE] OF 컬럼 ... IN 테이블명
    FOR EACH ROW
BEGIN
    INSERT/UPDATE/DELETE [DML만 가능]
    (:old.컴럼명/:new.컬럼명)
END;

트리거의 안쪽에 COMMIT/ROLLBACK을 사용하지 않는다.