1. 程式人生 > >oracle表內資料不明原因被刪除,建立觸發器記錄刪除記錄情況

oracle表內資料不明原因被刪除,建立觸發器記錄刪除記錄情況

第一步

grant create table to username;

第二步

CREATE OR REPLACE TRIGGER "TESTLOST_LOSTDATA_TRIGGER"
BEFORE DELETE ON TESTLOST 
FOR EACH ROW
DECLARE
  sql_stmt VARCHAR2(1000);
  tcount NUMBER;
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  SELECT COUNT(1)
    INTO tcount
    FROM user_tables t
   WHERE t.table_name = UPPER('backtestlost');
  IF tcount = 0 THEN
    sql_stmt := 'CREATE TABLE backtestlost AS SELECT * FROM testlost WHERE id=' ||
                :old.id;
    DBMS_OUTPUT.PUT_LINE('table not exit:' || sql_stmt);
    EXECUTE IMMEDIATE sql_stmt;
  ELSIF tcount > 0 THEN
    sql_stmt := 'INSERT INTO backtestlost (SELECT * FROM testlost WHERE id =' ||
                :old.id || ')';
    DBMS_OUTPUT.PUT_LINE('table exit:' || sql_stmt);
    EXECUTE IMMEDIATE sql_stmt;
    COMMIT;
  ELSE
    DBMS_OUTPUT.PUT_LINE('no action');
  END IF;
END;