PLSQL : 신규 및 :늙은
언제 사용해야 하는지 아는 사람 있나요?:NEW ★★★★★★★★★★★★★★★★★」:OLDPLSQL の pl pl pl pl pl pl 。
일반적으로 트리거의 항을 사용합니다.:old 값 및 「」을 :new새로운 값을 참조합니다.
다음은 위에 링크된 Oracle 문서의 예입니다.
CREATE OR REPLACE TRIGGER Print_salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab
FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
sal_diff number;
BEGIN
sal_diff := :new.sal - :old.sal;
dbms_output.put('Old salary: ' || :old.sal);
dbms_output.put(' New salary: ' || :new.sal);
dbms_output.put_line(' Difference ' || sal_diff);
END;
기동됩니다.BEFORE DELETE OR INSERT OR UPDATE :old.sal 전 및 "예전 급여"가 됩니다.:new.sal새로운 값이 포함됩니다.
할 수 있습니다[New] : Old Value DML 스테이트먼트
삽입 --: 이전 = NULL: 새로 만들기 = 새 값을 삽입했습니다.
Update --:Update 문 트리거됨:New = 업데이트할 새 값 이전 테이블에 있는 값
삭제 --:이전 = 삭제 전 값:새로 만들기 = NULL
:old 및 :new는 행 레벨트리거를 사용할 때 액세스행 레벨 데이터를 참조하는 의사 코드입니다.
- : old - 오래된 값을 나타냅니다.
- : new - 새로운 값을 나타냅니다.
아래 연산의 경우 각 이전 및 새 값:
- INSERT-:old.value=NULL,:new value=post insert 값
- DELETE-:old.value= 사전 삭제 값,:new value=null
- UPDATE-:old.value= 사전 업데이트 값,:new value=Post Update 값
예:
CREATE OR REPLACE TRIGGER get_dept
BEFORE DELETE OR INSERT OR UPDATE ON employees
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT('Old Dept= ' || :OLD.dept|| ', ');
DBMS_OUTPUT.PUT('New Dept= ' || :NEW.dept );
END;
트리거 스테이트먼트:
UPDATE employees
SET dept ='Accounts'
WHERE empno IN (101 ,105);
:new는 삽입하려는 새 값을 의미합니다.old는 데이터베이스 내의 기존 값을 의미합니다.
: old는 오래된 값입니다.new는 새로운 값입니다.
예를 들어 Creation_Date 및 Modified_By 필드에서 트리거로 많이 사용됩니다.
:old 및 :new는 행 레벨 트리거를 사용할 때 액세스 행 레벨 데이터를 참조하는 의사 레코드입니다.
•: 오래된 값 - 새로운 값 - 새로운 값
예를 들어 다음과 같습니다.
CREATE OR REPLACE TRIGGER mytrig BEFORE
INSERT OR
UPDATE
ON mytab FOR EACH ROW
BEGIN
IF INSERTING THEN
SELECT trunc(sysdate), trunc(sysdate) INTO :new.created, :NEW.last_updated FROM DUAL;
END IF; --INSERTING
IF UPDATING THEN
SELECT trunc(sysdate) INTO :NEW.last_updated FROM DUAL;
END IF; --UPDATING
END;
이것이 신구 개념을 설명해 주길 바란다.
:new는 새로운 값입니다.트리거 실행 후 컬럼의 값입니다.old는 오래된 값입니다.트리거 실행 후 이 값은 :new 값으로 대체됩니다.
New 및 Old는 트리거 내의 업데이트 작업과 더 관련이 있으며 필드 use old 및 최근 값 use new의 이전 값을 가져옵니다.
간단하게 말하면
데이터를 테이블로 조작하면 트리거가 실행됩니다.트리거 호출 중에는 두 가지 값이 모두 표시됩니다.하나는 오래된 데이터 값이고 다른 하나는 최근에 업데이트/삭제/삽입한 새로운 데이터 값입니다.
insert - old value는 null이고 new value에는 값 갱신이 포함되어 있습니다.old 및 new에는 값이 있지만 new에는 값이 포함되지 않습니다.
따라서 다음을 사용합니다.OLD 및 :NEW는 이력을 유지할 다른 테이블을 삽입/갱신하거나 :OLD 또는 :NEW 값을 기반으로 다른 종속 테이블을 삽입/갱신할 수 있습니다.
이게 도움이 됐으면 좋겠는데..
매우 간단합니다.
If Insert :old = NULL and :New = New Inserted Value
If Update :Old = Value already in the table :New = Updated Value in the Table
If Delete :Old = Value before deletion :New = NULL
바꿔 말하면
INSERT 트리거의 경우 OLD에는 값이 포함되지 않으며 NEW에는 새 값이 포함됩니다.
UPDATE 트리거의 경우 OLD에는 이전 값이 포함되며 NEW에는 새 값이 포함됩니다.
DELETE 트리거의 경우 OLD에는 오래된 값이 포함되며 NEW에는 값이 포함되지 않습니다.
예:
CREATE OR REPLACE TRIGGER update_name_view_trigger
INSTEAD OF UPDATE ON emp_locations
BEGIN
UPDATE employees SET
first_name = substr( :NEW.name, instr( :new.name, ',' )+2),
last_name = substr( :NEW.name, 1, instr( :new.name, ',')-1)
WHERE employee_id = :OLD.employee_id;
END;
: OLD 및 :NEW는 Record 유형의 변수이며 트리거가 실행되는 테이블 행과 컬럼이 동일합니다.행 레벨 트리거에만 사용할 수 있습니다.트리거는 사전 정의된 이벤트에서 자동으로 발생하므로 다음과 같습니다.OLD 및 :NEW도 자동으로 값을 가져옵니다.이름에서 알 수 있듯이 : OLD는 테이블에 존재하는 완전한 행 값(업데이트 및 삭제의 경우 기존 값)과 다음과 같은 값을 가집니다.NEW는 해당 행에 대해 새로운 값을 갖게 됩니다(업데이트 및 삽입의 경우 행 값을 갖게 됩니다).
A simple example that shows the use of old and new using triggers
CREATE TABLE emp_log(
emp_id NUMBER;
updated_by DATE,
new_salary VARCHAR2(15),
Action VARCHAR2(20));
CREATE OR REPLACE TRIGGER log_sal
AFTER UPDATE OF sal on emp
FOR EACH ROW
BEGIN
INSERT INTO emp_log( emp_id, updated_by, new_salary, Action)
VALUES(:NEW.empno, USER, :NEW.sal, 'New salary');
END;
/
하시면 됩니다.:OLD 전후 100% 중/ 100% ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ★:NEW는, (또는 갱신에 의해서 입니다.:OLD래된값값 값값값다다이다.
주로 여기에 언급되는 단어들이 있다.
: old는 트리거 발생 전 이전 값을 나타냅니다.:new는 트리거 발생 후 값을 포함합니다.
데이터베이스 수정(업데이트)을 시도할 때 이 메시지가 나타날 수 있습니다.를 삽입할 때:New표시됩니다.기존 데이터가 없으므로 다음과 같이 표시되지 않습니다.:Old 기존 할 때 기존 됩니다.:Old된 상세 을 「」로 합니다.:New.
트리거 본체 내 : OLD 및 :NEW 키워드를 사용하면 트리거의 영향을 받는 행의 열에 액세스할 수 있습니다.
: OLD는 컬럼이 갱신 또는 삭제되기 전에 컬럼의 오래된 값을 취득하기 위해 사용됩니다.따라서 OLD는 삭제 또는 업데이트 문의 트리거에만 사용됩니다.
:NEW는 갱신된 값 또는 데이터베이스에 삽입된 값 취득에 사용됩니다.따라서 NEW는 업데이트 및 삽입문 트리거에만 사용됩니다.
의사 코드에 관한 제약사항은 다음과 같습니다.
- 레코드 레벨의 조작에는 의사 코드를 표시할 수 없습니다.
예를 들어 트리거에는 다음 문을 포함할 수 없습니다.
:신규:=특수;
- 의사 코드는 실제 하위 프로그램 매개 변수가 될 수 없습니다.
( 의사 코드필드는 실제 서브 프로그램파라미터가 될 수 있습니다).
- 트리거는 OLD 필드 값을 변경할 수 없습니다.
그렇게 하려고 하면 ORA-04085가 올라갑니다.
- 트리거문이 DELETE인 경우 트리거는 새 필드 값을 변경할 수 없습니다.
이렇게 하면 ORA-04084가 올라갑니다.
- 트리거가 발생하기 전에 트리거 문이 실행되므로 AFTER 트리거는 새 필드 값을 변경할 수 없습니다.
이렇게 하면 ORA-04084가 올라갑니다.
- BEFORE 트리거는 INSERT 또는 UPDATE 문을 트리거하여 테이블에 입력하기 전에 새 필드 값을 변경할 수 있습니다.
- 문이 BEFORE 트리거와 AFTER 트리거를 모두 트리거하고 BEFORE 트리거가 NEW 필드 값을 변경하면 AFTER 트리거가 "인식"합니다.
언급URL : https://stackoverflow.com/questions/13135295/plsql-new-and-old
'programing' 카테고리의 다른 글
| 각도 사용UTC 날짜가 있는 JS 날짜 필터 (0) | 2023.03.13 |
|---|---|
| "프로젝트 검색.." 기능이 Eclipse IDE에 있습니까? (0) | 2023.03.13 |
| ORACLE IIF 스테이트먼트 (0) | 2023.03.13 |
| Json Schema에서 샘플 Json 출력 생성 (0) | 2023.03.13 |
| HTML 페이지에서 데이터를 React 컴포넌트로 전달하는 올바른 방법이 있습니까? (0) | 2023.03.13 |
