글이 잘안보이시면 클릭하셔서 보세요^^
블로그 이미지

쭈니후니

개발자로서 공부와 낚시를 좋아하는 한사람으로서의 추억을 담을 블로그입니다.

,

트리거란?

INSERT, UPDATE, DELETE문이 TABLE에 대해 행해질 때
묵시적으로 수행되는 PROCEDURE 입니다.

Trigger는 TABLE과는 별도로 DATABASE에 저장됩니다.
Trigger는 VIEW에 대해서가 아니라 TABLE에 관해서만 정의될 수 있습니다.





- BEFORE : INSERT, UPDATE, DELETE문이 실행되기 전에 트리거가 실행됩니다.
- AFTER : INSERT, UPDATE, DELETE문이 실행된 후 트리거가 실행됩니다.
- trigger_event : INSERT, UPDATE, DELETE 중에서 한 개 이상 올 수 있습니다.
- FOR EACH ROW : 이 옵션이 있으면 행 트리거가 됩니다.

-- 행 트리거 : 컬럼의 각각의 행의 데이터 행 변화가 생길때마다 실행되며,
그 데이터 행의 실제값을 제어할수 있습니다.
-- 문장 트리거 : 트리거 사건에 의해 단 한번 실행되며, 컬럼의 각 데이터 행을 제어할수 없습니다.

간단한 행 트리거 예제

SQL>CREATE OR REPLACE TRIGGER triger_test
BEFORE
UPDATE ON dept
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('변경 전 컬럼 값 : ' || : old.dname);
DBMS_OUTPUT.PUT_LINE('변경 후 컬럼 값 : ' || : new.dname);
END;
/


SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용)

-- UPDATE문을 실행시키면..
SQL>UPDATE dept
SET dname = '총무부'
WHERE deptno = 30

-- 트리거가 자동 실행되어 결과가 출력됩니당.
변경 전 컬럼 값 : 인사과
변경 후 컬럼 값 : 총무부

1 행이 갱신되었습니다.

간단한 행 트리거 예제2 (PLSQL BLOCK이 있는 트리거)

SQL>CREATE OR REPLACE trigger sum_trigger
BEFORE
INSERT OR UPDATE ON emp
FOR EACH ROW

DECLARE

-- 변수를 선언할 때는 DECLARE문을 사용해야 합니다
avg_sal NUMBER;

BEGIN

SELECT ROUND(AVG(sal),3)
INTO avg_sal
FROM emp;

DBMS_OUTPUT.PUT_LINE('급여 평균 : ' || avg_sal);

END;
/

트리거가 생성되었습니다.

SQL> SET SERVEROUTPUT ON ; -- (DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용)

-- INSERT문을 실행합니다..

SQL> INSERT INTO EMP(EMPNO, ENAME, JOB, HIREDATE, SAL)
VALUES(1000, 'LION', 'SALES', SYSDATE, 5000);

-- INSERT문을 실행되기 전까지의 급여 평균이 출력됩니다.
급여 평균 : 2073.214

1 개의 행이 만들어졌습니다. 

출처 응석이랑 청미랑 커플이야기 | 다슬아빠
원문 http://blog.naver.com/seok0528/140003690939


'개발 > ORCLE' 카테고리의 다른 글

오라클 SUBSTR 2번쨰  (0) 2008.11.10
오라클 ROUND TRUNC MOD  (0) 2008.10.27
오라클 문자열 처리 함수  (0) 2008.10.24
오라클 SubStr  (0) 2008.10.24
오라클 OUTER JOIN  (0) 2008.10.24
블로그 이미지

쭈니후니

개발자로서 공부와 낚시를 좋아하는 한사람으로서의 추억을 담을 블로그입니다.

,

CONCAT(char1, char2)

CONCAT 함수는 Concatenation의 약자로 두 문자를 결합하는 역할을 합니다.
"
||" 연산자와 같은 역할을 합니다.

SQL>SELECT CONCATNAME FROM dual ;

                NAME
   -------------
   Oracle Korea
(’Oracle’, ’ Korea’)



INITCAP(char)

주어진 문자열의 첫 번째 문자를 대문자로 변환시켜 줍니다.

SQL>SELECT INITCAPNAME FROM dual ;

             NAME
 -------------
  Kim jung sick
(’kim jung sick’)



LOWER(char)

문자열을 소문자로 변환 시켜 줍니다.


UPPER(char)

문자열을 대문자로 변환 시켜 줍니다.

SQL>SELECT LOWERNAME FROM dual ;

            NAME
-------------
  kim jung sick
(’KIM JUNG SICK’)

SQL>SELECT UPPERNAME FROM dual ;

            NAME
--------------
KIM JUNG SICK
(’kim jung sick’)



LPAD(char1, n [,char2])
왼쪽에 문자열을 끼어 놓는 역할을 합니다. n은 반환되는 문자열의 전체 길이를
나타내며, char1의 문자열이 n보다 클 경우 char1을 n개 문자열 만큼 반환합니다.

SQL>SELECT LPADNAME FROM dual ;

          NAME
------------
 *JUNG-SICK
(’JUNG-SICK’, 10, ’*’)



RPAD(char1, n [,char2])

LPAD와 반대로 오른쪽에 문자열을 끼어 놓는 역할을 합니다.

SQL>SELECT RPADNAME FROM dual ;

          NAME
------------
  JUNG-SICK*
(’JUNG-SICK’, 10, ’*’)



SUBSTR(char, m ,[n])
  SUBSTR함수를 이용하여 m 번째 자리부터 길이가 n개인 문자열을 반환한 합니다.
 m이 음수일 경우에는 뒤에서 M번째 문자부터 반대 방향으로 n개의 문자를 반환합니다.

SQL>SELECT SUBSTRNAME FROM dual ;

          NAME
-----------
            NG-
(’JUNG-SICK’, 3, 3)

-- 뒤에서부터 자를
SQL>SELECT
SUBSTRNAME FROM dual ;

        NAME  
-----------
          ICK
(’JUNG-SICK’, -3, 3)



LENGTH(char1)

문자열의 길이를 리턴 합니다.

SQL>SELECT LENGTH FROM dual ;

      TEST
   ----------
           9
(’JUNG-SICK’) TEST



REPLACE(char1, str1, str2)
REPLACE는 문자열의 특정 문자를 다른 문자로 변환 합니다.


SQL> SELECT REPLACE "Changes" FROM DUAL;
 
Changes
--------------
BLACK and BLUE
 
 
 
SQL> SELECT
REPLACE"Changes" FROM DUAL
 
Changes
------------
BLCK and JUE
 
 
-- 대소문자를 구분한다는 것을 알수 있습니다.
SQL>SELECT
REPLACE "Changes" FROM DUAL
 
Changes
------------
JACK and JUE
(’JACK and JUE’,’j’,’BL’)
(’JACK and JUE’,’JA’,’BL’)
(’JACK and JUE’,’J’,’BL’)



INSTR

 - 문자열이 포함되어 있는지를 조사하여 문자열의 위치를 반환합니다.
 - 지정한 문자열이 발견되지 않으면 0이 반환 됩니다.
 


-- 지정한 문자 OK가 발견되지 않아서 0이 반환 됩니다.
SQL>SELECT INSTR(’CORPORATE FLOOR’,’OK’)  "Instring" FROM DUAL
 
  Instring
----------
         0


-- OR이 있는 위치 2를 반환 합니다. 왼쪽부터 비교를 한다는 것을 알 수 있습니다.
SQL>SELECT INSTR(’CORPORATE FLOOR’,’OR’)  "Instring" FROM DUAL
 
  Instring
----------
         2
 

-- 왼쪽에서 3번째부터 시작을 해서 비교를 합니다. 2번째 OR의 위치가 반환 됩니다.
SQL>SELECT INSTR(’CORPORATE FLOOR’,’OR’, 3)  "Instring" FROM DUAL 
 
  Instring
----------
         5


-- 왼쪽에서 3번째부터 시작을 해서 비교를 하는데  OR이 두 번째 검색되는 지점의 위치를 반환 합니다.
SQL> SELECT INSTR(’CORPORATE FLOOR’,’OR’, 3, 2)  "Instring" FROM DUAL;
 
  Instring
----------
       14
 



TRIM

 - 특정한 문자를 제거 합니다.  
 - 제거할 문자를 입력하지 않으면 기본적으로 공백이 제거 됩니다.
 - 리턴값의 데이터타입은 VARCHAR2 입니다.
 


-- 0을 제거 합니다.
SQL>SELECT TRIM(0 FROM 0009872348900)  "TRIM Example" FROM DUAL;
 
TRIM Example
------------
98723489
 
 
-- 어떤 문자도 입력하지 않으면 기본적으로 공백이 제거 됩니다.  
-- TRIM을 사용한 위에 예제와 사용하지 않은 아래 예제의 결과 값이 다르게 나오는 것을 알 수 있습니다.

SQL>SELECT NVL(TRIM (’  ’),’공백’)  "TRIM Example"  FROM DUAL
 
TRIM Example
------------
공백
 
 
SQL>SELECT NVL(’  ’,’공백’)  "TRIM Example" FROM DUAL
 
TRIM Example
------------
 

 

 



LTRIM

SQL>SELECT LTRIM(’xyxXxyLAST WORD’,’xy’) "LTRIM example"  FROM DUAL;
 
LTRIM example
------------
XxyLAST WORD
 
 
RTRIM

SQL>SELECT RTRIM(’BROWNINGyxXxy’,’xy’) "RTRIM example"     FROM DUAL;

RTRIM examp
-----------
BROWNINGyxX

'개발 > ORCLE' 카테고리의 다른 글

오라클 ROUND TRUNC MOD  (0) 2008.10.27
오라클 트리거 정의  (1) 2008.10.24
오라클 SubStr  (0) 2008.10.24
오라클 OUTER JOIN  (0) 2008.10.24
오라클 Length, LengthB  (0) 2008.10.24
블로그 이미지

쭈니후니

개발자로서 공부와 낚시를 좋아하는 한사람으로서의 추억을 담을 블로그입니다.

,