美文网首页
oralce 存储过程样例总结

oralce 存储过程样例总结

作者: Yluozi | 来源:发表于2024-01-21 17:09 被阅读0次

    一、‘插入+删除’存过

    针对 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、任务名称、状态、实际启动时间和日志日期等信息。通过这些信息,可以了解任务的执行情况,例如是否成功、失败或被停止等。

    请注意,为了查询这些数据字典视图,您需要具有适当的权限。

    相关文章

      网友评论

          本文标题:oralce 存储过程样例总结

          本文链接:https://www.haomeiwen.com/subject/yrmeodtx.html