database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9230 게시물 읽기
No. 9230
트리거관련해서 궁금중이 생겼습니다....
작성자
김원진(an35w)
작성일
2013-02-05 17:51
조회수
9,137

이제 plsql접한지 1주일이 되어갑니다...

초보라 모르는게 너무 많네요..

여러가지도움 많이받고있습니다...

트리거를 공부하고있는데

CREATE OR REPLACE FUNCTION func_mmitmm_trig()
  RETURNS trigger AS
$BODY$
DECLARE
begin

         쿼리

return null;

end;

$BODY$
  LANGUAGE plpgsql VOLATILE;

CREATE TRIGGER "func_mmitmm_trig" AFTER  INSERT ON MMITMM FOR EACH ROW
  when (LENGTH(RTRIM(NEW.ITM_CODE)) > 0 AND LENGTH(RTRIM(NEW.ITM_NAME)) > 0)
EXECUTE PROCEDURE "func_mmitmm_trig"();

이렇게 작성을 했습니다..

트리거는 잘돌아가는데 $BODY$----요부분이 무슨의미인가요?? $$로 사용되는글들이 있던데 다른건지요??
 

LANGUAGE plpgsql VOLATILE; 하고 LANGUAGE plpgsql 는 무슨차이가있나요??

그리고

return null;-----요걸로 트리거가 정상으로 돌아가는지 확인도 가능한가요???

 

이 글에 대한 댓글이 총 2건 있습니다.

AS 다음에 $ 문자로 시작해서, $문자로 끝나는 것이 제일 먼저 오면,

그 단어를 AS 다음 와야하는 작은 따옴표로 인식히고, (이를 $인용구문이라고 합니다)

이 $인용 구문안에서는 작은 따옴표를 그대로 사용할 수 있겠끔합니다.

AS ' select '''hello world'''; ' 이런식이 되는 작은 따옴표 난발을

AS $$ select 'hello world'; $$로 처리하는 것입니다.

$$랑 $BODY$는 차이점은 그냥 인용구의 시작 단어(보통 $라벨이라고 하죠)를 다르게 한 것 뿐입니다.

왜냐하면 그 인용 구문 안에 혹 $$ 쓸 경우가 생길지도 모른다는 노파심 때문에.

 

plpgsql 구문으로 트리거를 작성할 때, 현재 처리하는 해당 row를 return 하지 않으면,

트리거 함수를 실행시킨 테이블에 자료가 반영되지 않습니다.

즉, return null 이라함은 아무 row도 리턴하지 않겠다가 되고, insert 작업용 트리거였다면,

원본 테이블에 자료가 insert 되지 않겠죠.

그래서, return null 쓰는 경우는 예외처리를 하고 싶은데, 응용프로그램 입장에서는 DB 오류가 아니어야하는 경우에 사용합니다.

 

함수의 volatile 예약어는 그 함수의 입력 매개변수가 같더라도 출력결과가 다를 수 있기 때문에, 내부적으로 캐싱 처리를 하지 마라고 지정하는 것입니다. 이 값이 기본이기 이런 result 캐싱과 관계된 예약어를 따로 지정하지 않았다면, 내부적으로 모든 함수는 volatile 지정한 것과 같습니다.

 

김상기(ioseph)님이 2013-02-06 14:49에 작성한 댓글입니다.

감사합니다...

덕분에 궁금증이 확 풀렸습니다.

항상 김상기님의 글들을 보며 여러가지로 많이 알아가고 있습니다..

김원진님이 2013-02-06 15:34에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
9234NOLOGGING 변환 ㅠㅠ 도와주세요 고수님. [2]
김성미
2013-02-13
9051
9232C언어에서 odbc를 이용한 connect 방법 문의 [1]
insun
2013-02-08
10392
9231정렬에 대하여 물어봅니다.(순번 정렬입니다만 예외조건을 넣는 방법) [6]
송민재
2013-02-06
9157
9230트리거관련해서 궁금중이 생겼습니다.... [2]
김원진
2013-02-05
9137
9229다중행 서브쿼리 update 방법 [2]
효연
2013-02-04
9526
9228트리거 함수 작성하는데 막히는 부분이 있습니다. [1]
이기자
2013-02-01
8588
9227duplicate key value violates unique constraint 에러 질문이요~~~ [5]
조민경
2013-02-01
14161
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다