【发布时间】:2016-01-20 16:02:52
【问题描述】:
我有下面给出相同列的拖车表:
表 1 PAYROLLFILE:
表 2 TEMP_PAYROLLFILE:
我编写了一个 PL SQL 函数,它将表 PAYROLLFILE 中的重复行插入到 TEMP_PAYROLLFILE 中,并从表 PAYROLLFILE 中删除原始行。简而言之,表 TEMP_PAYROLLFILE 正在为表 PAYROLLFILE 中删除的数据保留备份。
这是 PL SQL 函数代码:
FUNCTION Remove_transaction_by_id(employee_id NUMBER)
RETURN CLOB
AS
cnt INT;
BEGIN
INSERT INTO temp_payrollfile
SELECT *
FROM payrollfile
WHERE empid = employee_id;
DELETE FROM payrollfile
WHERE empid = employee_id;
SELECT Count(*)
INTO cnt
FROM payrollfile;
COMMIT;
RETURN '<result><status>success</status> <row>'
||cnt
|| '</row></result>';
EXCEPTION
WHEN OTHERS THEN
RETURN '<result><status>Error</status></result>';
END remove_transaction_by_id;
但是,我想做的还不止这些,我想自动删除表 TEMP_PAYROLLFILE 中的备份行在特定时间段结束后要做到这一点特定行。我需要触发器吗?我是新手,以前从未做过此类工作。如果有人知道这种技术,我将非常感谢您的帮助。如果需要更多详细信息,请告诉我。谢谢
更新:
我写了这个工作来清理旧行:它会工作吗?
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'oe.REMOVE_TEMP_PAYROLLFILE_JOB',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN DBMS_STATS.GATHER_TABLE_STATS('oe',
'TEMP_PAYROLLFILE');
delete from TEMP_PAYROLLFILE where RECORDDATE < sysdate-1;
END;',
start_date => '20-JAN-16 1.00.00AM US/Pacific',
repeat_interval => 'FREQ=DAILY',
end_date => '25-JAN-16 1.00.00AM US/Pacific',
enabled => TRUE,
comments => 'Gather table statistics');
END;
【问题讨论】:
-
您可以定期执行存储过程以删除不需要的行(时间大于给定时间段)
-
感谢@Kilanny 对这篇文章的第一次回复。但是我从来没有做过存储过程定期删除不需要的行。如果你知道一些代码然后请帮忙。谢谢