一、‘插入+删除’存过
针对 P_E_EVENT 表,保留两个月有效数据,并将全量数据备份
分析:共两个步骤
1)备份两个月前的数据到备份表P_E_EVENT_backup中
2)执行成功后,将表P_E_EVENT备份过的数据清空
月执行存储过程
存储过程编写:1将存储过程内容编写,2编写并执行调度任务将存过执行
1)存储过程内容编写
CREATE OR REPLACE PROCEDURE insert_P_E_EVENT_ByMon IS
-- 定义变量
v_success NUMBER;
BEGIN
-- 插入数据的语句,将P_E_EVENT 两月内 数据插入到备份表P_E_EVENT_backup中
INSERT INTO P_E_EVENT_backup select p.* from P_E_EVENT p where p.EMS_TIME < ADD_MONTHS(SYSDATE, -2);
-- 判断插入是否成功
IF SQL%ROWCOUNT = 0 THEN
DBMS_OUTPUT.PUT_LINE('数据插入失败!');
v_success := 0;
ELSE
DBMS_OUTPUT.PUT_LINE('数据插入成功!');
v_success := 1;
END IF;
-- 如果插入成功,清空原表数据
IF v_success = 1 THEN
DELETE FROM P_E_EVENT p where p.EMS_TIME < ADD_MONTHS(SYSDATE, -2);
COMMIT; -- 提交事务以保存更改
END IF;
END insert_P_E_EVENT_ByMon;
/
查询
SELECT *
FROM sys.dba_source
WHERE 1=1
and type = 'PROCEDURE'
--AND owner = 'sys'
AND name = 'INSERT_P_E_EVENT_BYMON';
其他查询编写存过有方式
使用plsql去编写执行存储过程:
image.png
点击测试,右键存储过程,点击测试,点击调试,查看测调试结果
image.png
2)执行存储过程调度
DBMS_SCHEDULER 和 DBMS_JOBS 区别:
DBMS_SCHEDULER和DBMS_JOBS是Oracle数据库中用于调度和管理作业的两个不同的工具。以下是它们之间的主要区别:
功能:DBMS_SCHEDULER的功能更为强大,提供了更多高级的调度选项和功能,例如作业运行日志、强大的调度语法、作业运行时资源管理、作业参数传递等。相比之下,DBMS_JOBS功能较为基础,主要用于创建和管理简单的作业。
创建和管理方式:使用DBMS_SCHEDULER创建和管理作业的方式更为灵活和强大。可以通过其提供的API和数据字典来创建和管理作业、计划和日志等。而DBMS_JOBS的创建和管理方式则相对简单,可以通过其提供的API和数据字典来管理作业。
存储位置:通过DBMS_SCHEDULER创建的作业信息存储在user_scheduler_jobs数据字典中,而通过DBMS_JOBS创建的作业信息存储在user_jobs数据字典中。
总的来说,DBMS_SCHEDULER提供了更强大和灵活的调度和管理功能,适用于需要更高级调度功能的应用场景,而DBMS_JOBS则适用于简单的作业管理需求。
BEGIN
DBMS_SCHEDULER.create_job (
job_name => 'insert_P_E_EVENT_ByMon_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN insert_P_E_EVENT_ByMon; END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=MONTHLY; BYMONTHDAY=1', -- 每月的第1天执行
-- repeat_interval => 'FREQ=MINUTELY; BYMINUTE=0', -- 每分钟执行一次
enabled => TRUE
);
END;
/
频率:
image.png
select * from user_scheduler_jobs 可查询存储过程调度,具体如下:
DBMS_SCHEDULER中:
要查看DBMS_SCHEDULER调度任务是否执行,可以通过查询DBA_SCHEDULER_JOBS和DBA_SCHEDULER_JOB_RUN_DETAILS数据字典视图来获取相关信息。
首先,可以使用以下查询语句来查看调度任务的运行状态:
SELECT job_name, state, enabled, last_start_date, schedule_name
FROM dba_scheduler_jobs;
这将返回所有调度任务的名称、状态、是否启用、最后启动时间和调度计划名称等信息。如果任务状态为"RUNNING",则表示任务正在执行;如果状态为"SUCCEEDED"、"FAILED"或"STOPPED",则表示任务已经执行完毕。
plsql查看位置:
image.png另外,如果需要查看更详细的调度任务执行信息,可以使用以下查询语句:
SELECT log_id, job_name, status, actual_start_date, log_date
FROM dba_scheduler_job_run_details
WHERE job_name = 'your_job_name';
将'your_job_name'替换为要查询的调度任务的名称。这将返回任务的运行日志,包括日志ID、任务名称、状态、实际启动时间和日志日期等信息。通过这些信息,可以了解任务的执行情况,例如是否成功、失败或被停止等。
请注意,为了查询这些数据字典视图,您需要具有适当的权限。
网友评论