oracle 存储过程实践--查询ID后根据ID更新表内容

背景:项目表中有个结束日期的字段,需要根据这个字段,把大于当前日期的其他字段参数给更新为空;

查询sql: select id from uf_accountrem where sj<to_char(sysdate,'yyyy-mm-dd');

创建存储过程示例:

create or replace procedure t_gxkwxt is
        cursor vid is
                select id from uf_accountrem where sj<to_char(sysdate,'yyyy-mm-dd');
 ---cursor是显示游标,创建显示游标vid,赋予值为select的内容;           
begin
        for row_b in vid loop
----for为循环游标,执行游标内容
          update uf_accountrem set BLYX='',bz='',sj='' where id in(row_b.id);                                      
        end loop;
    commit;
end;
    

尝试在plsql测试存储过程,确认存储过程是否正常运行;

确认正常后,创建job定时任务,(dbms_job与dbms_scheduler有着oracle版本上的区别,oracle11G以上建议是使用dbms_scheduler方法)

----begin为开始头,end为结束
begin
DBMS_SCHEDULER.CREATE_JOB (
job_name => 't_gxkwxt_job' , --定义定时任务的名称
job_type => 'STORED_PROCEDURE' , --指执行的任务类型,STORED_PROCEDURE=存储过程;
job_action => 't_gxkwxt' , ---存储过程的名称,需和创建的存储过程名称保持一致;
start_date => sysdate, ---开始执行的时间,可自定义,我这里取的是当前时间;
Repeat_Interval => 'FREQ=DAILY;BYHOUR=13', ---设置计划任务的时间。具体任务类型可以参考下面描述
Enabled => True ---状态 true=启动
);
End ;

查看定时任务的是否创建和执行情况

select job_name,job_type,enabled,state from user_scheduler_jobs
select * from user_scheduler_job_run_details where job_name='T_GXKWXT_JOB'

定时任务的参数说明

job_name        : 必选, 任务名称  
job_type        : 必选, 任务类型(  
                    PLSQL_BLOCK,      -- 执行一个PL/SQL匿名快  
                    STORED_PROCEDURE, -- 执行一个存储过程  
                    EXECUTABLE,       -- 执行一个外部程序  
                    CHAIN             -- 执行一个CHAIN  
                  )  
job_action      : 必选, 任务内容, 与job_type配合使用  
start_date      : 可选, 首次执行时间, 为空时表示立即执行  
repeat_interval : 可选, 执行频率, 为空时表示只执行一次(  
                    FREQ=MINUTELY; -- 表示间隔单位, 可选值有YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY  
                    INTERVAL=1     -- 表示间隔周期  
                  )  
enabled         : 可选, 是否启用任务  

repeat_interval的参数描述补充

YEARLY(年), MONTHLY(月), WEEKLY(周), DAILY(日), HOURLY(时), MINUTELY(分), SECONDLY(秒)等单位。
INTERVAL 关键字用来指定间隔的频繁,可指定的值的范围从1-999。
BYHOUR 指定一天中的小时。可指定的值的范围从1-24。16,17,18就表示天天下午的四、五、6点。
BYDAY 关键字用来指定每周的哪天运行。
BYMINUTE 关键字用来指定分钟,要配合BYDATE使用,50,表示某个时刻的50分。
BYMONTHDAY 关键字用来指定每个月中的哪一天。-1 表示每个月最后一天。
BYMONTH 关键字用来指定每一年的月份。
BYDATE 指定日期。0310就表示3月10日。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Oracle中,存储过程是一组预定义的SQL语句集合,可以在单个事务中执行,可以用于执行复杂的业务逻辑和数据操作。当需要关联多个进行数据更新时,也可以在存储过程中实现。 首先,我们可以使用PL/SQL语言定义一个存储过程来关联更新数据。例如,我们有两个A和B,需要将B中的某些字段更新A中。可以使用以下步骤实现: 1. 定义存储过程,并传入必要的参数,例如要更新的字段和条件等。 2. 在存储过程中使用UPDATE语句来更新A的数据。根据条件,可以使用JOIN子句将A和B进行关联。例如: ``` UPDATE table_a a SET a.field1 = b.field1, a.field2 = b.field2 FROM table_b b WHERE a.id = b.id; ``` 在UPDATE语句中,通过指定的别名来关联A和B,并使用相应的字段进行更新。 3. 执行存储过程,通过调用存储过程的名称并传递相应的参数来触发更新操作。 请注意,以上只是一个简单的示例,实际情况可能更加复杂。在实际应用中,还需要考虑事务处理、异常处理、权限控制等方面的内容。另外,存储过程中的SQL语句也可以包含其他类型的操作,例如插入数据、删除数据等。 总之,使用Oracle存储过程关联更新数据可以提供更灵活和高效的数据操作方式,适用于复杂的业务需求。但在设计和实现存储过程时,需要考虑到性能、安全性和可维护性等方面的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值