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 8968 게시물 읽기
No. 8968
trigger 질문
작성자
서귀동(애송이)
작성일
2012-02-29 17:27
조회수
8,366

CREATE TABLE test100 (

idx serial

, id varchar(20) not null

, ad_type char(2) not null default ''

, tm_a timestamp without time zone

, tm_b timestamp without time zone

, ap_flag enum_tf not null default 'F'

, es_flag enum_tf not null default 'F'

, bt_flag enum_tf not null default 'F'

);

 

CREATE OR REPLACE FUNCTION update_test100() RETURNS TRIGGER AS $test100$
BEGIN
  IF (OLD.es_flag = 'T' AND OLD.bt_flag = 'T') THEN
    NEW.ap_flag = 'T';
    NEW.tm_b = current_timestamp;
  END IF;
  RETURN NEW;
END;
$test100$ LANGUAGE plpgsql;

 

CREATE TRIGGER trg_test100 AFTER UPDATE ON test100

FOR EACH ROW EXECUTE PROCEDURE update_test100();

 

이렇게 트리거를 생성했고,

es_flag, bt_flag 값이 둘다 T가 되면 ap_flag와 tm_b에 값을 업데이트 할려고 하는데

안돼서 이렇게 질문을 올립니다.

 

es_flag과 bt_flag는 동시에 업데이트 되지는않구요. 각각 업데이트 되는 시점이 다릅니다.

 

es_flag와 bt_flag 둘다 값이 T가 될때 트리거가 동작하게 할려면 어떻게 해야 할까요?

프로그램으로 처리만 하다가 디비에서 처리하게 할려고 하니 잘 안되네요.

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

 칼럼 값의 변경 상태에 따른 트리거 실행은, 

옛 값(old)과 새 값(new)의 변화가 있을 때에만 실행해야겠죠. 

 

예를 들면,

if old.es_flag = 'F' and new.es_flag = 'T'  then 

....

이런식으로 옛 값이  F였고, 새 값이 T였을 때, 이런 식으로 

해당 조건 안으로 들어갈 수 있는 모든 조건을 꼼꼼히 따져서 만들면 되겠죠. 

그냥 일단 글로 쭉 써보세요. 그것을 코드로 만들면 됩니다. 

아마 윗 문제라면, 두 가지 경우가 나올 것 같네요. 

 

다음, 어떤 조건에 의해서, ap_flag 값도 바꾸어야할 경우라면, 그게 자료로 기록되어야한다면, 

after 트리거가 아니라, before 트리거여야합니다.

 

김상기(ioseph)님이 2012-03-09 09:57에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
8973디비생성시 encoding 문제로 문의글 남깁니다. [1]
신현종
2012-04-03
9677
89729.0이상 위도우용 바이너리는 어떻게 설치하지요? [2]
심상호
2012-04-01
10056
89707K 길이의 텍스트 입력하는 방법? [2]
김동수
2012-03-11
8780
8968trigger 질문 [1]
서귀동
2012-02-29
8366
89679.0부터 생긴 테이블, 칼럼 단위 collate 사용자 정의 장점 [2]
김상기
2012-02-29
11076
8965libpqxx는 PostgreSQL DB가 설치된곳에서만 쓸 수 있나요? [5]
송미란
2012-02-28
9689
8964암호화 관련 질문드립니다. [1]
김종수
2012-02-28
8330
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다