plsql定时执行存储过程(plsql定时执行语句)
如何在plsql中执行存储过程
create or replace procedure job_table asv_sql varchar2(2000);begin v_sql:='create table job_test2 as select * from job_test'; EXECUTE immediate v_sql; EXCEPTION WHEN OTHERS THEN rollback;end job_table; 存储过程内不能直接使用create或alter,需要使用EXECUTE执行动态语句才可以 还有执行存储过程,必须在命令窗口内执行
plsql中如何利用job让存储过程每天中午12点和凌晨零点各执行一次
执行方法begin 存储过程名(参数1,参数2);--参数间用逗号隔开,字符型的要加单引号,数字型的直接输入,结尾带分号end;--结尾带分号
PLSQL存储过程
存储过程是 PLSQL 的一个方面的应用,而 PLSQL 是存储过程的基础。
即存储过程需要用到 PLSQL
创建无参存储过程 hello ,无返回值
语法:
删除存储 hello ,语法 drop procedure 过程名
调用存储过程方式一: exec 过程名
exec hello;
调用过程存储方式二: PLSQL 程序
调用过程存储方式三: Java 程序 CallableStatement 接口
创建有存储过程的 raiseSalary (编号),为7369号员工涨工资10%,演示in的语法,大小写不敏感
创建有参存储过程 findEmpNameAndSalAndJob (编号),查询7788号员工的姓名,职位,月薪,返回多个值,演示 out 的用法
用存储过程,写一个计算个人所得税的功能
Oracle中如何定时执行一条SQL语句
通过网上查询,找到一种方案,就是先在oracle里面对要定时的sql写成存储过程,再用DBMS_scheduler对存储过程进行定时执行。
在数据库中新建了一个表MY_JOB_TEST
在数据库中新建了一个表MY_JOB_TEST
在数据库中新建了一个表MY_JOB_TEST
在PLSQL中,执行下面语句模拟存储过程的调用,执行后要点提交才有反应
[sql] view plain copy
BEGIN
INSERT?INTO?MY_JOB_TEST?(NUM)?VALUES?(1);
END;
然后下面建立一个存储过程JOB_TEST
(注意,这里用户需要CREATE JOB权限,可以用超级管理员用户执行下面语句给指定用户赋予该权限)
[sql] view plain copy
Grant?Create?Job?To?指定用户名
[sql] view plain copy
SQLCREATE?OR?REPLACE?PROCEDURE
JOB_TEST
BEGIN
INSERT?INTO?MY_JOB_TEST?(NUM)?VALUES?(1);
END;
(此处要执行存储过程不能用exec JB_TEST,这种执行方式只能在命令行中使用)
使用DBMS_SCHEDULER进行定时,这里为每分钟执行一次
[sql] view plain copy
SQL?BEGIN
DBMS_SCHEDULER.CREATE_JOB?(
job_name???????????=??'SCHEDULER_TEST',
job_type???????????=??'STORED_PROCEDURE',
job_action?????????=??'JOB_TEST',
start_date?????????=??sysdate,
repeat_interval????=??'FREQ=MINUTELY;INTERVAL=1');
END;
但是这样子定时任务并不会执行。
我们可以用下面的命令查看一下scheduler的状态
[plain] view plain copy
SQLSELECT?*?FROM?USER_SCHEDULER_JOBS;
此时我们可以看到enable的状态是false的,因此我们需要去启动定时任务
[plain] view plain copy
SQLBEGIN
DBMS_SCHEDULER.ENABLE('SCHEDULER_TEST');
END
dbms_scheduler.enable('j_test'); ?--启用jobs ??
dbms_scheduler.disable('j_test'); ?--禁用jobs ? ?
dbms_scheduler.run_job('j_test'); ?--执行jobs ? ?
dbms_scheduler.stop_job('j_test'); ?--停止jobs ??
dbms_scheduler.drop_job('j_test'); ?--删除jobs ?
然后再查询job的enable装态,发现为true了。
然后查看MY_JOB_TEST表,发现每分钟会往里面添加记录。
当需要修改定时任务或者调度的其他属性时,可以用下面的
dbms_scheduler.set_attribute('调度名','调度属性','调度值');
至此,定时任务完成。
如何用plsql每隔5分钟自动执行一次存储过程
1,创建一个存储过程
bb
作用是往pig表中插入数据
sql
create
or
replace
procedure
job_pro_test
as
2
begin
3
insert
into
job_test
values(sysdate);
4
end;
5
/
procedure
created
2,创建一个job,名称为job2010
;作用是每分钟(60×24=1440)执行一次存储过程job_pro_test。
sql
variable
job2010
number;
sql
begin
2
dbms_job.submit(:job2010,'job_pro_test;',sysdate,'sysdate+1/1440');
3
end;
4
/