Trigger Function 190716

  • Cmdbuild 내 트리거 펑션을 통하여 값을 자동으로 넣어주게 하는데 목적이 있따.

    -- Function : pubilc.tt_floor_descr()
    -- DROP FUNCTION public.tt_floor_descr();
    CREATE OR REPLACE FUNCTION public.tt_floor_descr()
    	RETURNS trigger AS
    $BODY$
    DECLARE
    	building VARCHAR;
    	level_code VARCHAR;
    BEGIN
    		SELECT concat_ws( ' ', "Code", "Description" ) INTO building
    		FROM "Building"
    		WHERE "Id" = NEW."Building";
    
    		SELECT "Code" INTO level_code
    		FROM "LookUp"
    		WHERE "Id" = NEW."Level";
    
    		NEW."Description" = concat_ws(' - ', building, level_code );
    		RETURN NEW;
    END;
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    ALTER FUNCTION public.tt_floor_descr()
      OWNER TO postgres;
    

CREATE OR REPLACE

오브젝트를 생성하거나 수정한다.

FUNCTION public.tt_floor_descr() RETURNS trigger AS

펑션의 이름이고 트리거를 반환한다 .

declare

사용할 변수를 선언하는 곳 여기서는 빌딩과 레벨 코드를 선언함

$BODY$

참고사항

https://sas-study.tistory.com/182

  • create or replace : 오브젝트를 생성하거나 수정하겠다는 의미. 처음생성할땐 create명령어가 먹고 drop 하지 않는 한 replace가 그다음부터는 실행될것이다. 따라서 대부분 오브젝트를 생성할때 생성하거나 수정한다~ 라는 키워드로 같이 쓰는편.
  • function hate_count() returns trigger as $trigger_hate_count$ : 함수 hate_count()를 생성할건데 이 함수는 트리거를 반환한다. 그 트리거이름을 $$ 사이에 넣어준다.
  • declare : 사용할 변수선언하는 곳, 여기서는 count값이 필요해서 선언해두었다.
  • begin ~ end : 몸통부분, 표현하고자 하는 일련의 과정을 적는 곳.
  • TG_OP : 발생하는 트리거 이벤트 종류, INSERT, DELETE, UPDATE, TRUNCATE가 있다고 한다. 본인은 INSERT와 DELETE가 필요하기 떄문에 두개만 해당.
  • new. / old. : insert나 delete update 이벤트를 발생시킬때 사용하는 접근변수? 라고한다. insert/update 이벤트의 경우 new 키워드로 새로 들어오는 값에 접근할 수 있고, delete / update 이벤트의 경우는 old 키워드로 제거/수정되고 난후의 값에 접근할 수 있다. 접근할 수 있는 값은 트리거가 바라보고 있는 테이블에 한해서 가능하다.
  • into : select 문을 이용해서 어떤 단일값을 변수 count에 담을때 저러한 문법으로 담아야 한다.
  • for each row : 각각의 row에 접근할 수 있다. 이걸 해야 .new / .old 키워드로 삽입/삭제/수정되는 값들에 접근할 수 있다.
  • raise notice ‘문자열 %’,변수 : 일반 출력문으로 count값과 old / new 값들이 잘 나오는지 확인하기 위해서 디버깅용으로 사용했던 것들, % 갯수만큼 뒤에 출력할 변수들을 덧붙여 주면된다.