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
운영게시판
최근게시물
Oracle Q&A 39393 게시물 읽기
No. 39393
트리거 관련 질문있습니다.
작성자
이민선(mslee03)
작성일
2012-04-10 17:25
조회수
3,627

CREATE OR REPLACE TRIGGER "SANHAK".SYGP04H_ON_DELETE_2  
BEFORE DELETE ON SANHAK.SYGP04H  --modi
FOR EACH ROW
declare
 ls_cd  varchar2(4);
BEGIN
IF DELETING THEN
  select A.PROJECT_MANAGER_ID
  into ls_cd
  FROM  SANHAK.SYGP04H A
  WHERE A.SUB_PROJECT_ID = :OLD.SUB_PROJECT_ID;
       
        INSERT   
        INTO  PUKRIKPU.NKRDD521
                ( DATA_TP,
                 UNIV_KEY0,
                 UNIV_KEY1,
                 --UNIV_KEY9,
                 AGC_ID,
                 DEL_DTTM )
        VALUES ('11',   --modi
                 ls_cd,
                :OLD.SUB_PROJECT_ID,
                --:NEW.JOB_UID,
                '330280',
                TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') );
      
END IF;

END SYGP04H_ON_DELETE_2; 

====================================================

현재 이런식으로 트리거를 작성했는데요,  ora-04091 을 비롯한 트리거 관련 에러들이

발생합니다. row 트리거 라서 mutating 이 발생한다는 것 같은데 잘 이해가 되질 않습니다.

어떤 문제인지와 수정방법을 여쭙고 싶습니다.

감사합니다.

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

트리거가 걸린 테이블에 대해서 Select 등의 작업을 하시면 해당 에러가 발생합니다.

변경중인데 참조하려고 하면 안된다는 에러지요.

위의 경우엔 다시 또 Select 해서 ls_cd 를 구하는데.

이렇게 구하는것부터가 잘못된 생각입니다.

간단하게 아래와 같이 구하시면 되는거죠.

ls_cd := OLD.PROJECT_MANAGER_ID;

마농(manon94)님이 2012-04-12 23:41에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39396ms-sql row 복재 connect by level < ? 기능 여부
nightbobo
2012-04-12
3270
39395정렬 관련 문의드립니다. [2]
박정우
2012-04-12
3267
39394선택된 항목 삭제 방법 궁금해요
축구
2012-04-12
3230
39393트리거 관련 질문있습니다. [1]
이민선
2012-04-10
3627
39392토드에서 한줄(1 row) 복사하는 법이 있나요 [1]
박우용
2012-04-10
6656
39391쿼리 문의 [2]
카라
2012-04-10
3846
39390트리거 변수처리 궁금합니다. [1]
김석훈
2012-04-10
3474
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다