나는 하나의 테이블을 감시하는 방아쇠를 세웠다. 사용자가 candidate_selected 열을 Y로 변경하면 oracle이 해당 테이블에서 열을 올리고 현재 활성 인 후보 즉 Y를 추적하는 조회 테이블에 삽입합니다. 열을 업데이트하려고하면 ORA-04091 오류가 발생합니다. 트리거는 테이블이 작성된 테이블을 변경하지 않으며 왜이 오류가 발생하는지 막혔습니다. 어떤 도움도 대단히 감사하겠습니다 - 나는 몇 사이트에왔다 및 수정 프로그램을 볼 수 없습니다,오라클 트리거 ORA-04091
이CREATE OR REPLACE TRIGGER DEMO_SCHEMA.TRG_CANDIDATE_SELECTED
AFTER UPDATE OF CANDIDATE_SELECTED ON DEMO_SCHEMA.TBL_CANDIDATES FOR EACH ROW
BEGIN
IF :NEW.CANDIDATE_SELECTED = 'Y' THEN
INSERT INTO DEMO_SCHEMA.TBL_CANDIDATES_LKP
(UPDATED_DT, GROUP_ID, CAND_ID
,STAGE, STEP, EQUIPMENT, ORDER_REQ
,INCLUDED_IN_STUDY)
SELECT SYSDATE, GROUP_ID, CAND_ID, STAGE
,STEP, TRIM(REGEXP_SUBSTR(EQUIPMENT, '[^,]+', 1, LEVEL)) EQUIPMENT
,(CASE WHEN UPPER(ORDER_REQ) = 'FALSE' THEN 1
ELSE ROW_NUMBER() OVER (PARTITION BY GROUP_ID, CAND_ID, STAGE, STEP ORDER BY CAND_ID)
END) ORDER_REQ, INCLUDED_IN_STUDY
FROM (
SELECT GROUP_ID, CAND_ID
,STAGE, STEP, EQUIPMENT, EQUIPMENT EQUIP
,ORDER_REQ, INCLUDED_IN_STUDY
FROM DEMO_SCHEMA.TBL_CANDIDATES
WHERE GROUP_ID = :NEW.GROUP_ID
AND LOT_ID = :NEW.CAND_ID
AND STAGE = :NEW.STAGE
AND STEP = :NEW.STEP
)
CONNECT BY LEVEL <= REGEXP_COUNT(EQUIP,', ')+1;
ElSIF :NEW.CANDIDATE_SELECTED = 'N' THEN
UPDATE DEMO_SCHEMA.TBL_CANDIDATE_LKP
SET INCLUDED_IN_STUDY = :NEW.CANDIDATE_SELECTED
WHERE GROUP_ID = :NEW.GROUP_ID
AND CAND_ID = :NEW.CAND_ID
AND STAGE = :NEW.STAGE
AND STEP = :NEW.STEP;
END IF;
END TRG_CANDIDATE_SELECTED;
/
에 구문 오류가있을 수 있습니다 내가 너무 오래 :) 그것을 쳐다 봤는데 생각 그러나 그것이 내가 게시하기 전에 내가 몇 가지를 바꿔야했기 때문입니다. 이 코드는 Oracle에서 컴파일됩니다. 건배.
"ORA-04091"이라는 오류 메시지는 무엇입니까? 오류 번호 옆에 전체 오류 메시지를 제공하십시오. 우리는 오라클 오류 번호와 그에 상응하는 오류 메시지를 모두 걷는 백과 사전이 아닙니다! * {:-) – Boneist
'tbl_candidates'의 행 레벨 트리거는 일반적으로 'tbl_candidates'를 쿼리 할 수 없습니다. 데이터 모델을 알지 못하면'tbl_candidates'를 정말로 쿼리해야합니까, 아니면': new' 의사 레코드에 이미있는 데이터를 사용할 수 있습니까? –
@JustinCave하지만 insert 문에서 tbl_candidates는 OP가 해당 예제 코드에서 오타를 입력하지 않았다고 가정 할 때 트리거가 켜져있는 tbl_candidates와 다른 스키마에 있습니다. – Boneist