2013-08-03 6 views
1

삭제하기 전에 하나의 행을 다른 테이블에 복사하는 트리거를 작성 중입니다. 나는 그것이 단지 하나의 행으로 작동하도록 할 수는 없다. 나는 여기서 많은 게시물을 보았고 where 문을 id = existingId와 같은 것으로 설정했다. 또는 그런 것. 트리거를 하나의 행에 복사하는 방법을 알아낼 수 없습니다. 또는 현재 행이 무엇인지 말해주는 방법. where 문에서 테이블의 특정 값 (예 : id, name 등)을 사용할 수 없습니다. 어떤 행을 선택해야할지 모르기 때문입니다. 고맙습니다!한 테이블에서 다른 테이블로 한 행만 복사하는 SQL - where 문을 설정하는 방법?

이것은 내가 지금까지 무엇을 가지고 :

create or replace TRIGGER archive_tbl 
BEFORE DELETE ON STUDENT 
BEGIN 
INSERT INTO ARCHIVE_STUDENT (stdid, fname, lname, mi, majorid, address, city, state, zip, phone, advid) 
SELECT * FROM STUDENT 
WHERE ???? 
END; 

답변

1

오라클 들어, :old.col1 삭제하는 것입니다 그 refer to the row에 사용할 수 있습니다. 트리거 for each row을 선언해야합니다.

INSERT INTO YourTable (col1, col2, col3) 
VALUES (:old.col1, :old.col2, :old.col3) 

SQL 서버의 경우, deletedspecial table를 사용할 수 있습니다. 여기에는 삭제 된 행이 포함됩니다. 트리거에

INSERT INTO YourTable (col1, col2, col3) 
SELECT col1, col2, col3 FROM deleted 
+0

오 마이 맙소사. 나는 이것을 지금 몇 시간 동안 알아 내려고 노력해왔다. 나는 그것이 내가 잃어버린 간단하다는 것을 알았다. :(오라클을 사용하여 첫 번째 예제가 작동했습니다. 정말 고마워요! – teppuus

1

, 당신은 (만 세 삭제의 경우) 레코드의 값을 참조하자 newold 전이 변수에 대한 참조를 가질 수 있습니다.

학생을 이미 삭제 했으므로 Student에서 값을 선택할 수 없습니다. 따라서 각 열에 old.column을 사용하거나 삭제 된 테이블을 쿼리 할 수 ​​있습니다. Andomar는 대답 에서처럼 말합니다.

관련 문제