GS数据库存储过程和定时任务

存储过程

存储过程是数据库提供的批量执行事务的功能,可以直接被应用程序调用,接受输入参数,返回输出参数或者查询结果集。支持变量定义和游标cursor。

创建存储过程

SQL> create or replace procedure  procedure_name is 

# 变量定义

v_temp  varchar(50)

begin

# 给变量赋值

select xxx from table/object/function into v_temp ;

select/insert/update/delete...

commit;

end procedure_name;

/

存储过程中使用游标

SQL> create or replace procedure  procedure_name is 

# 变量定义

declare

    v_id  varchar(50)

    v_name  varchar(50)

    # 游标的两种定义方法

    # cursor v_cursor is select id, name from table

    v_cursor cursor for select id, name from table

begin

# 打开游标

open v_cursor

# 循环处理结果集

loop 

# 用游标读取一行赋值给变量v_temp ,

fetch v_cursor into v_id, v_name;

if xxx

end if;

# 处理数据

select/insert/update/delete...

end loop;

# 关闭游标

close v_cursor;

commit;

end procedure_name;

/

存储过程中使用循环

1分钟执行一次,执行30次

SQL> create or replace procedure  procedure_name is 

begin

for i in 1..30 loop

select/insert/update/delete...

commit;

sleep(60);

end loop;

end procedure_name;

/

存储过程中使用参数

SQL> create or replace procedure  procedure_name(in s_var  varchar(10) is 

...

查询存储过程

SQL> select * from adm_procedures where object_name='procedure_name ';

手动调用存储过程

SQL> call procedure_name;

带参数的存储过程怎样调用?

存储过程中调用存储过程

  procedure   a  
  begin  
      ...  
      insert   #table   exec   b  
  end  
   
  procedure   b  
  begin  
      ...  
      insert   #table    exec   c  
      select   *   from   #table    
  end  
   
  procedure   c  
  begin  
      ...  
      select   *   from   sometable  
  end 

删除存储存储过程

SQL> drop procedure_name;

定时任务

和操作系统的定时任务cron类似,提供定时周期执行某项事务的功能。

创建定时任务

SQL> declare jobno number;

begin

# 定时任务中调用存储过程,每30分钟执行一次

dbe_task.submit(jobno, 'procedure_name()', sysdate, 'sysdate+1800/6400' ); 

# 每小时执行一次

# dbe_task.submit(jobno, 'procedure_name()', sysdate, 'sysdate+1/24' ); 

# 每天凌晨3点执行

# dbe_task.submit(jobno, 'procedure_name()', sysdate, 'trunc(sysdate+1) + (3*60)/(24*60)' ); 

commit;

end;

/

查询JOB

SQL> select * from my_jobs where job='job_id';

删除job

SQL> declare 

begin

dbe_task.cancel(job_id);

commit;

end;

/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值