1
기본 쿼리/삽입을 넘어 SQL에 익숙하지 않습니다. (더 자세히 읽으면서 빠르게 볼 수 있습니다.)SQL 삽입 트리거가 이전 값에 정상적으로 액세스합니까?
다음은 매우 간단한 예제입니다.
UID | NAME | AGE | LOCATION
45 | bob | 23 | Canada
31 | bill | 20 | Romania
과 같은 'person_history'두 번째 테이블 :
나는 테이블과 같은 '사람'이 내가update person set age=10 where UID==45
I처럼이 테이블에 삽입
UID | PID | NAME | AGE | LOCATION
- | - | - | - | -
내 방아쇠를 당기고, 기존의 값에 직접 액세스하고, 두 번째 테이블로 밀어 넣고 계속하십시오. 원래의 인서트.
내가이 일을 생각할 수있는 방법은 다음과 같습니다
이Select uid, name, age, location,
into v_uid, v_name, v_age, v_location
from person
where uid = :new.uid
다음
Insert into person_history(UID, PID, NAME, AGE, LOCATION)
VALUES (sequence.nextval, v_uid, v_name, v_age, v_location);
처럼 삽입을하지만 그 일을 매우 라운드에 대한 방법처럼 보인다 - 특히 경우 테이블에는 50 개의 열이 있습니다.
이 방법이 올바른지,이 문제를 해결하는보다 우아한 방법이 있습니다.
다시 한 번, 내가이 모든 것을 얼마나 새롭게했는지 기억하십시오. 예제가 정말 도움이 될 것입니다. 당신이이 부분?
Select uid, name, age, location,
into v_uid, v_name, v_age, v_location
from person
where uid = :new.uid
그냥이 방법을 사용하지 않는 이유
어떤 DBMS를 사용하십니까? 일반적으로 귀하의 접근 방식이 완벽하게 좋다고 생각합니다. 열을 열거하는 것에 대해 걱정한다면 역사상 모든 열을 가져야 할 필요가 있다면 다시 고려해야합니다. –