SQLを使用して2022/03/25をトリガーします(SQLの作成)
5690 ワード
トリガー:自動実行プロセス
SET SERVEROUT ON;
MEMBER 2トリガ
トリガTRI MEMBER 2 INSERTの作成
CREATE OR REPLACE TRIGGER TRI_MEMBER2_INSERT
AFTER INSERT ON MEMBER2
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('MEMBER2 테이블에 자료추가됨');
INSERT INTO MEMBER2_BK (USERID, USERPW, USERNAME, USERAGE, USERDATE)
VALUES(:NEW.USERID, :NEW.USERPW, :NEW.USERNAME, :NEW.USERAGE, CURRENT_DATE);-- 자동커밋
END;
/
-- 트리거 확인
INSERT INTO MEMBER2 (USERID, USERPW, USERNAME, USERAGE, USERDATE)
VALUES('G','G','G',60,CURRENT_DATE);
COMMIT;
SELECT * FROM MEMBER2;
テーブル作成テーブル構造+コンテンツコピー
CREATE TABLE MEMBER2_BK AS SELECT * FROM MEMBER2;
SELECT * FROM MEMBER2;
SELECT * FROM MEMBER2_BK;
トリガTRI MEMBER 2 UPDATEの作成
CREATE OR REPLACE TRIGGER TRI_MEMBER2_UPDATE
AFTER UPDATE ON MEMBER2
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('MEMBER2 테이블에 자료변경됨');
DBMS_OUTPUT.PUT_LINE('변경전 데이터 : '|| :OLD.USERNAME);
DBMS_OUTPUT.PUT_LINE('변경한 데이터 : '|| :NEW.USERNAME);
UPDATE MEMBER2_BK SET USERNAME= :NEW.USERNAME
WHERE USERID = :OLD.USERID;
END;
/
-- 트리거 확인
UPDATE MEMBER2 SET USERNAME='G변경이름' WHERE USERID = 'G';
COMMIT;
トリガTRI MEMBER 2 DELETEの作成
CREATE OR REPLACE TRIGGER TRI_MEMBER2_DELETE
AFTER DELETE ON MEMBER2
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('MEMBER2 테이블에 자료삭제됨');
DBMS_OUTPUT.PUT_LINE('MEMBER2 테이블에서 ' || :OLD.USERID ||'가 삭제됨');
DELETE FROM MEMBER2_BK WHERE USERID = :OLD.USERID;
END;
/
DELETE FROM MEMBER2 WHERE USERID = 'E';
COMMIT;
トリガの有効化と無効化(ENABLE DISABLE)
ALTER TRIGGER TRI_MEMBER2_DELETE DISABLE;
トリガTRI MEMBER 2 IUDの作成(追加、変更、削除)
CREATE OR REPLACE TRIGGER TRI_MEMBER2_IUD
AFTER INSERT OR UPDATE OR DELETE ON MEMBER2
FOR EACH ROW
BEGIN
IF INSERTING THEN
DBMS_OUTPUT.PUT_LINE('MEMBER2 테이블에 자료추가됨');
INSERT INTO MEMBER2_BK (USERID, USERPW, USERNAME, USERAGE, USERDATE)
VALUES(:NEW.USERID, :NEW.USERPW, :NEW.USERNAME, :NEW.USERAGE, CURRENT_DATE);
ELSIF UPDATING THEN
DBMS_OUTPUT.PUT_LINE('MEMBER2 테이블에 자료변경됨');
DBMS_OUTPUT.PUT_LINE('변경전 데이터 : '|| :OLD.USERNAME);
DBMS_OUTPUT.PUT_LINE('변경한 데이터 : '|| :NEW.USERNAME);
UPDATE MEMBER2_BK SET USERNAME= :NEW.USERNAME
WHERE USERID = :OLD.USERID;
ELSIF DELETING THEN
DBMS_OUTPUT.PUT_LINE('MEMBER2 테이블에 자료삭제됨');
DBMS_OUTPUT.PUT_LINE('MEMBER2 테이블에서 ' || :OLD.USERID ||'가 삭제됨');
DELETE FROM MEMBER2_BK WHERE USERID = :OLD.USERID;
END IF;
END;
/
トリガTRI MEMBER 2 UPDATE AGEの作成
CREATE OR REPLACE TRIGGER TRI_MEMBER2_UPDATE_AGE
AFTER UPDATE OF USERAGE ON MEMBER2
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('MEMBER2 테이블에 자료변경됨');
DBMS_OUTPUT.PUT_LINE('변경전 데이터 : '|| :OLD.USERNAME);
DBMS_OUTPUT.PUT_LINE('변경한 데이터 : '|| :NEW.USERNAME);
UPDATE MEMBER2_BK SET USERNAME= :NEW.USERNAME
WHERE USERID = :OLD.USERID;
END;
/
SELECT * FROM ORDER2;
ORDER 2トリガ
トリガTRI ORDER 2 INSERTの作成
-- 주문 했을 때 주문수량만큼 물품테이블의 재고수량 변경
CREATE OR REPLACE TRIGGER TRI_ORDER2_INSERT
AFTER INSERT ON ORDER2
FOR EACH ROW
DECLARE
V_QTY NUMBER :=0;
BEGIN
-- 물품테이블에서 제고수량을 가져옴.
SELECT I.ITEMQTY INTO V_QTY FROM ITEM2 I WHERE I.ITEMNO =:NEW.ITEMNO;
-- 주문수량이 재고수량보다 작거나 같아야함.
IF :NEW.ORDCNT <= V_QTY THEN
-- 물품의 재고수량에서 주문수량만큼 뺌
UPDATE ITEM2 SET ITEMQTY = ITEMQTY-:NEW.ORDCNT WHERE ITEMNO =:NEW.ITEMNO;
ELSE
-- 오류 출력
RAISE_APPLICATION_ERROR(-20022,'재고부족');
END IF;
END;
/
INSERT INTO ORDER2 (ORDNO, ORDCNT, ORDDATE, ITEMNO, USERID)
VALUES(SEQ_ORDER2_ORDNO.NEXTVAL, 100, CURRENT_DATE, 1012, 'A');
COMMIT;
トリガTRI ORDER IUDの作成
-- 주문이 추가되면 주문백업 테이블에 자료 백업
-- 주문 백업 테이블 생성
CREATE TABLE ORDER2_BK AS SELECT * FROM ORDER2;
-- 추가,수정,삭제
CREATE OR REPLACE TRIGGER TRI_ORDER2_IUD
AFTER INSERT OR UPDATE OR DELETE ON ORDER2
FOR EACH ROW
BEGIN
-- 추가시는 재고수량 감소
IF INSERTING THEN
-- 물품의 재고수량에서 주문수량만큼 뺌
UPDATE ITEM2 SET ITEMQTY = ITEMQTY - :NEW.ORDCNT WHERE ITEMNO = :NEW.ITEMNO;
INSERT INTO ORDER2_BK (ORDNO, ORDCNT, ORDDATE, ITEMNO, USERID)
VALUES(:NEW.ORDNO, :NEW.ORDCNT, CURRENT_DATE, :NEW.ITEMNO, :NEW.USERID);
-- 수정때는 재고수량을 감소, 증가
ELSIF UPDATING THEN
UPDATE ITEM2 SET ITEMQTY = ITEMQTY + (:OLD.ORDCNT - :NEW.ORDCNT)
WHERE ITEMNO = :NEW.ITEMNO;
UPDATE ORDER2_BK SET ORDCNT= :NEW.ORDCNT WHERE ORDNO = :OLD.ORDNO;
-- 삭제시는 재고수량 증가
ELSIF DELETING THEN
UPDATE ITEM2 SET ITEMQTY = ITEMQTY + :OLD.ORDCNT WHERE ITEMNO = :OLD.ITEMNO;
DELETE FROM ORDER2_BK WHERE ORDNO = :OLD.ORDNO;
END IF;
END;
/
-- 트리거 확인
INSERT INTO ORDER2 (ORDNO, ORDCNT, ORDDATE, ITEMNO, USERID)
VALUES(SEQ_ORDER2_ORDNO.NEXTVAL, 100, CURRENT_DATE, 1012, 'B');
UPDATE ORDER2 SET ORDCNT=50 WHERE ORDNO=10007;
DELETE FROM ORDER2 WHERE ORDNO = 10007;
COMMIT;
Reference
この問題について(SQLを使用して2022/03/25をトリガーします(SQLの作成)), 我々は、より多くの情報をここで見つけました https://velog.io/@anrkfl/SQL활용-20220325SQL-작성하기트리거テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol