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 7564 게시물 읽기
No. 7564
트리거 사용에 대하여
작성자
지우개
작성일
2008-11-24 00:18ⓒ
2008-11-24 00:21ⓜ
조회수
6,655

CREATE TABLE members {

    id varchar(16),

    name varchar(16),

    last_access timestamp(0)

}


CREATE TABLE member_logins {

    id varchar(16),

    last_access timestamp(0)

}


위와 같이 회원정보를 담고있는 members 테이블과 로그인시 생성되고 로그아웃시 삭제되는 member_logins 테이블이 있습니다.

로그아웃할때(member_logins 테이블의 로우가 삭제될때) 마지막 접속시각을 member.last_access 에 update 시키는 트리거를 만들려고 합니다.


CREATE OR REPLACE FUNCTION func_update_access()

RETURNS TRIGGER AS $$

BEGIN

    UPDATE members SET last_access = NEW.last_access;

    RETURN NULL;

END;

$$

LANGUAGE plpgsql;


CREATE TRIGGER update_access BEFORE  DELETE

    ON member_logins FOR EACH ROW

    EXECUTE PROCEDURE func_update_access();

   


와 같이 만들었습니다.

그런데 막상 member_logins 를 삭제하니 다음과 같은 오류가 나오면서 제대로 동작을 안하네요.


ERROR : record "new" is not assigned yet


하루종일 트리거에 대해서 공부한후 트리거를 처음 사용해보는데 어떻게 해야할지 모르겠습니다.

특히 트리거의 동작시점과 이전 테이블의 데이타가 어떤 변수명으로 넘어오는지 잘모르겠습니다.

위와 같은 상황에 대해서 어떤 트리거함수와 트리거를 사용해야하는지,

그리고 제가 만들어본 쿼리를 보고 혹시 제가 잘못이해한게 있는지 조언좀 부탁드립니다.


감사합니다.

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

new -> old 로 바꾸세요. new는 insert/update때 쓸 쑤 있고 old는 update/delete때 쓸 수 있습니다.

 

신기배(소타)님이 2008-11-24 06:03에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7567[문의] could not access status of transaction [1]
Disremember
2008-12-01
7820
7566template DB를 사용하여 새로운 DB 생성
2008-11-26
6233
7565Primary Keys 의 인덱스 사용 [1]
지우개
2008-11-24
6652
7564트리거 사용에 대하여 [1]
지우개
2008-11-24
6655
7563[질문]서로다른 데이타베이스에서 select 하기, 시퀀스생성 [2]
최승일
2008-11-23
7299
7562libpq-C에서 데이터 베이스가 바쁜지 안바쁜지 판단할 수 있는 것이 있나요?
정성
2008-11-21
5800
7561Postgresq과 mysql 함께 사용 [3]
한재희
2008-11-18
6007
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다