1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| ACCEPT schem PROMPT "Enter a schema name : "
ACCEPT nom PROMPT "Enter a table name : "
ACCEPT temps_minute PROMPT "Enter the number of minutes you want to flashback : "
ACCEPT condition PROMPT "specify the WHERE clause (optional) : "
DECLARE
CURSOR cur_now IS SELECT * FROM &schem..&nom &condition;
CURSOR c_column IS
SELECT column_name,ROWNUM FROM ALL_TAB_COLUMNS uc WHERE table_name=upper('&nom') AND OWNER = upper('&schem');
cvar_now cur_now%ROWTYPE;
str VARCHAR2(4000);
col VARCHAR2(50);
col2 VARCHAR2(50);
i NUMBER :=0;
BEGIN
COMMIT;
FOR rec2 IN c_column
LOOP
IF i=0 THEN
str := 'cur_before.' || rec2.column_name;
col := rec2.column_name;
col2 := 'cvar.' || col;
i:=i+1;
ELSE
str := str || ', cur_before.' || rec2.column_name;
END IF;
END LOOP;
dbms_flashback.enable_at_time(TO_TIMESTAMP(SYSDATE - (&temps_minute/1440)));
FOR cur_before IN (SELECT * FROM &schem..&nom &condition)
LOOP
dbms_flashback.disable;
DBMS_OUTPUT.PUT_LINE(str);
OPEN cur_now;
FETCH cur_now INTO cvar_now;
IF cur_now%NOTFOUND THEN
INSERT INTO &schem..&nom VALUES (str);
where col = col2;
END IF;
CLOSE cur_now;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE || ' ' || SQLERRM);
END;
/ |
Partager