一、定时器
直接在DBMS_Jobs右键new一个定时器出来。需要填写的部分主要有以下两个部分
- what主要填写你需要定时器执行的存储过程名称。如上图所示,我写了一个名称为“AddHydropowerData”的存储过程。
- Interval为定时器执行的时间。
(1).每分钟执行
Interval => TRUNC(sysdate,‘mi’) + 1/ (24*60)
每小时执行
Interval => TRUNC(sysdate,‘hh’) + 1/ (24)
(2).每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate+ 1) +1/ (24)
(3).每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,‘星期一’))+1/24
(4).每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
(5).每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),‘Q’) + 1/24
(6).每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,‘yyyy’),6)+1/24
(7).每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,‘yyyy’),12)+1/24
二、 存储过程
procedures右键新建存储过程
以上是我使用存储过程的简单例子,经过学习,一些存储过程的使用语法如下
--***************************自定义存储过程名和参数*****************************
create or replace procedure test(dataAge number, dataMyName VARCHAR2) as--is也可以
--***************************自定义变量区域*****************************
--可以在自定义的时候赋值
age number := dataAge;
myName varchar2(5) := dataMyName;
whileCount number:=1;
--也可以直接自定义查询sql结果集
cursor dataResult is
select * from S_TEST;
--************************具体操作区域*********************************
begin
-------------直接赋值------------
age := 1;
myName := '小米';
------------通过sql赋值(单独select字段需要into赋值,否则报错)----------
select t.age into age from S_TEST t where t.id = '1';
select t.name into myName from S_TEST t where t.id = '1';
SELECT t.age,t.name into age,myName from S_TEST t where t.id = '1';
------------for循环语句--------------
for data in dataResult loop
age := data.age;
myName := data.name;
end loop;
------------直接在for循环语句赋值--------------
for data in ( select t.* from S_TEST t) loop
age := data.age;
myName := data.name;
end loop;
------------count赋值(当不存在数据时返回null)--------------
select count(*) into whileCount from S_TEST;
------------while循环语句--------------
while whileCount<5 loop
whileCount:=whileCount+1;
end loop;
------------if判断语句--------------
If (whileCount=1) then
null;
Elsif (whileCount=2) then
null;
Else
null;
End if;
------------报异常语句(NO_DATA_FOUND为没有数据异常)--------------
select t.age into age from S_TEST t where t.id = '1';
EXCEPTION
WHEN NO_DATA_FOUND THEN
null;
------------别名不能和字段名相同,否则编译通过运行报错--------------
end test;
三、调试
- 通过定时器调试
即将定时器触发事件调到当前时间的后一分钟即可 - 存储过程直接调试
直接存储过程右键-test,填写相关参数即可进行调试
学无止境!!!!!!!!!!!