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 4510 게시물 읽기
No. 4510
응용프로그램내 처리와 DB상의 트리거 사용차이..
작성자
이경욱(feelv)
작성일
2003-01-06 12:18
조회수
1,010

상품 테이블 t0

주문목록 테이블 t1

 

이런 구조를 가진 디비가 있는데 업무로직은

주문이 이뤄지면 (UPDATE) 상품 테이블에 해당상품의 주문횟수를 증가시키고

주문취소가 발생하면(UPDATE) 반드시 주문횟수를 감소시켜야 됩니다.

 

그래서.. 트리거를 사용하려는데 먼저 내장 함수를 만들어 등록

시켜야 되는줄 알고있습니다. 그런데 위와같은 업무처리는 굳이

함수를 만들고 트리거를 사용하지 않아도 응용프로그램에서 업데이트

쿼리 한줄 더 써주면 되지 않나 해서 질문드립니다.

예를 들어 주문이 발생했다면 밑에 처럼 쿼리가 만들어 지겠지요.

 

BEGIN

INSERT INTO t1 VALUES (nextval('order_seq'), product_id, order_date))

UPDATE t0 SET order_cnt = order_cnt + 1 WHERE product_id = 'A1'

COMMIT

 

그리고.. 만약 이런 처리를 트리거로 하려면 함수를 먼저 만들어야

하지 않습니까? 그런데 함수를 작성하려는데 UPDATE 쿼리처럼

리턴값이 없는 경우 함수작성할때 리턴타입은 뭘로 해줘야 되나요?

위의 경우로 예를 들어 plpgsql을 사용한 예제하나만 보여주세요..

이것저것 부탁만 드리네요. 죄송해여..

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

예제는 plpgsql 로 찾아 보시면 많이 있습니다. 그것을 참조로 하시면 될듯 합니다. 아울러 return type 이 없을 경우에는 opaque 로 return 타입으로 해주면 됩니다. 이런건 메뉴얼을 참조 바랍니다.

 

아울러 DBMS 에서 처리 할수 있는것은 모든 것을 DBMS 로 보내는 것이 제일 좋습니다. 이상입니다.

정재익(advance)님이 2003-01-06 12:27에 작성한 댓글입니다.

트리거를 쓰는 이유는

응용 프로그램에서의 코딩량을 줄이기위해서라기 보다는 관계형 데이터가 안전하게 처리되기 위함이라는 것이 더 큰 이유입니다.

 

윗 예에서 주문이 일어나면, 그 해당 상품의 주문 횟수를 증가한다는 사실을 응용프로그램 개발자가 모르게 된다면(개발자가 바뀐다든지, 건망증이 심한 개발자든지) 사태는 심각해 지겠지요. 이런 사태를 미연에 막기위해서, 트리거를 사용합니다.

 

위에서 재익님이 말씀하신 것처럼, RDBMS로 할 수 있는 모든 것은 RDBMS로 하는 것이 RDBMS 자료설계의 첫번째 원칙입니다.

김상기(ioseph)님이 2003-01-06 15:10에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4513[질문] 인서트시 ????? 이렇게 나오네요.. [1]
이근호
2003-01-06
802
4512[질문] 아무래도 db를 날려야 할거 같은데요.. [2]
이근호
2003-01-06
972
4511파라미터값을 배열로 받을때의 문제입니다. [2]
눈love
2003-01-06
1145
4510응용프로그램내 처리와 DB상의 트리거 사용차이.. [2]
이경욱
2003-01-06
1010
4509PostgreSql tool 이 있나요? [1]
이은주
2003-01-06
1223
4508[질문] 에러 메시지 (로그를 지웠어요..T.T) [1]
이근호
2003-01-06
1128
4507createlang [1]
이경욱
2003-01-06
1110
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다