oracle中游标cursor的使用及定时器job用法网上收集加整理的Word文档下载推荐.docx
- 文档编号:22370235
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:14
- 大小:19.62KB
oracle中游标cursor的使用及定时器job用法网上收集加整理的Word文档下载推荐.docx
《oracle中游标cursor的使用及定时器job用法网上收集加整理的Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《oracle中游标cursor的使用及定时器job用法网上收集加整理的Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
BEGIN
OPENcur_emp;
FETCHcur_empINTOv_emp;
DBMS_OUTPUT.PUT_LINE(v_emp.id||'
'
||v_emp.last_name);
CLOSEcur_emp;
--FETCHcur_empINTOv_emp;
关闭游标后就不能再访问游标
--CLOSEcur_emp;
不能重复关闭游标
END;
游标一般跟循环语句配合使用,那就要知道游标的四个属性
关于游标的四个属性
%ROWCOUNT当前游标所处理的行数,例如cur_emp%ROWCOUNT(它是一个数,可以直
接使用)
%ISOPEN判断此游标是否被打开cur_emp%ISOPEN
declare
v_emps_emp%rowtype;
cursorcur_empis
select*froms_emp;
opencur_emp;
loop
fetchcur_empintov_emp;
exitwhencur_emp%notfound;
dbms_output.put_line(v_emp.id||'
||v_emp.first_name);
ifcur_emp%isopenthen
dbms_output.put_line('
true'
);
else
false'
endif;
end;
%FOUND返回的是检查上一次FETCH语句的结果,如果上一次FETCH语句找到一条记录
,那么FOUND返回真,如果没有知道就返回假
%NOTFOUND与%FOUND相反
1)%FOUND
DECLARE
CURSORcur_empISSELECT*FROMs_emp;
WHILEcur_emp%FOUNDLOOP
||v_emp.first_name);
DBMS_OUTPUT.PUT_LINE(cur_emp%ROWCOUNT);
ENDLOOP;
2)%NOTFOUND
BEGIN
LOOP
EXITWHENcur_emp%NOTFOUND;
'
END;
CURSOR与两种循环的配合使用
1)与简单循环的配合使用如下:
例如:
2)与WHILE循环的配合使用如下:
WHILEcur_emp%FOUNDLOOP
oracle定时器简单操作
文章分类:
数据库
首先创建一张测试表:
Sql代码
createtableJOBTEST(IDVARCHAR2(50)primarykey,NAMEVARCHAR2(20),
AGENUMBER(3))然后写好定时器要调用的存储过程:
createorreplaceproceduremyprocedureisbegininsertintojobtest
values(to_char(sysdate,'
yyyy-MM-ddhh:
mm:
ss'
),'
july'
22);
接下来就要建立定时器了:
varmyjobnumber;
begindbms_job.submit
(:
myjob,'
myprocedure;
sysdate,'
sysdate+1/24/60/60'
最后启动定时器:
begindbms_job.run(:
myjob);
启动之后,该定时器(理论上)会一秒钟想数据表jobtest中插入一条记录。
但是
事实上每隔大概五秒才执行一次(原因未知)。
如果建立以上sql语句之后,定时器并未运行,请一dba角色运行select*from
v$parametertwheret.namelike'
job%'
;
看value的值是多少,如果等于0,则将
它设置为大于0的值即可:
可以在C:
\oracle\admin\july\pfile\init.ora文件中修改但需要重启动数据库
(july指的是实例名):
job_queue_interval=10
job_queue_processes=4;
如果不想重启动数据库
ALTERSYSTEMSETjob_queue_processes=5;
查看定时器:
以dba角色登录执行select*fromdba_jobs;
或者当前用户
select*fromuser_jobs;
删除定时器begindbms_job.remove(jobno);
jobno为job
查询列表中的编号,删除后必须提交事务才能彻底删除。
也可以以dba登录后从
dba_jobs表中删除。
偶尔一些定时器执行时间很长,在其执行期间要将其停止,必须将其进程kill,然
后等待其释放资源,相关语句:
select*fromV$sessiontorderbyt.USERNAME,t.SID;
Sql代码
selectsid,serial#,username,program,machine,statusfromv$session;
select
*fromv$accesstwheret.OWNER='
altersystemkillsession'
x,y'
定时器的参数说明:
myjob参数是由Submit()过程返回的binary_ineger。
这个值用来唯一标识一个工作
;
what参数是将被执行的PL/SQL代码块,这里指的是一个存储过程,注意名字后面的
分号;
next_date参数指识何时将运行这个工作。
写Job的时候可以不指定该值;
interval参数何时这个工作将被重执行。
关于interval的设置,参考以下几个例子:
1、每分钟执行
Interval=>
TRUNC(sysdate,’mi’)+1/(24*60)
2、每天定时执行
例如:
每天的凌晨2点执行
TRUNC(sysdate)+1+2/(24)
3、每周定时执行
每周一凌晨2点执行
TRUNC(next_day(sysdate,2))+2/24--星期一,一周的第二天
4、每月定时执行
每月1日凌晨2点执行
TRUNC(LAST_DAY(SYSDATE))+1+2/24
5、每季度定时执行
例如每季度的第一天凌晨2点执行
TRUNC(ADD_MONTHS(SYSDATE,3),'
Q'
)+2/24
6、每半年定时执行
每年7月1日和1月1日凌晨2点
ADD_MONTHS(trunc(sysdate,'
yyyy'
),6)+2/24
7、每年定时执行
每年1月1日凌晨2点执行
ADD_MONTHS(trunc(sysdate,'
),12)+2/24
Oracle特殊包和"
DBMS_Job"
包的使用方法--定時器SQL/Oracle2008-11-27
Oracle提供了几个包,它们可以用来完成很多任务,从内部进程通信到文件I/O,到
在PL/SQL块中动态创建和执行SQL语句。
所有这些包由SYS用户所拥有—当Oracle最
初安装时两个用户中的一个,这些包中最重要的包括:
◆DBMS_Alert不用轮询就允许应用命名并发出警告条件信号的过程与函数
◆DBMS_DDL允许获取PL/SQL程序内部一定数量的DDL语句的过程
◆DBMS_Describe为存储过程与函数描述API的过程
◆DBMS_Job管理BLOBs、CLOBs、NCLOBs与BFILEs的过程与函数
◆DBMS_Output允许PL/SQL程序生成终端输出的过程与函数
◆DBMS_Pipe允许数据库会话使用管道通信(通信频道)的过程与函数
◆DBMS_SQL在PL/SQL程序内部执行动态SQL的过程与函数
◆DBMS_UtilityDBMS_Utility
◆UTL_File允许PL/SQL程序读写服务器文件系统上的文本文件的过程与函数。
DBMS_Job包的用法:
包含以下子过程:
◆Broken()过程。
◆change()过程。
◆Interval()过程。
◆Isubmit()过程。
◆Next_Date()过程。
◆Remove()过程。
◆Run()过程。
◆Submit()过程。
◆User_Export()过程。
◆What()过程。
1、Broken()过程更新一个已提交的工作的状态,典型地是用来把一个已破工
作标记为未破工作。
这个过程有三个参数:
job、broken与next_date.
PROCEDUREBroken(jobINbinary_integer,BrokenINboolean,next_dateIN
date:
=SYSDATE)
job参数是工作号,它在问题中唯一标识工作。
broken参数指示此工作是否将标记为破——TRUE说明此工作将标记为破,而
FLASE说明此工作将标记为未破。
暂停job:
Execdbms_job.broken<
101,true>
next_date参数指示在什么时候此工作将再次运行。
此参数缺省值为当前日期和
时间。
2、Change()过程用来改变指定工作的设置。
这个过程有四个参数:
job、what、next_date与interval.
PROCEDUREChange(jobINbinary_integer,WhatINvarchar2,next_dateIN
date,intervalINvarchar2)
此job参数是一个整数值,它唯一标识此工作。
What参数是由此工作运行的一块PL/SQL代码块。
next_date参数指示何时此工作将被执行。
interval参数指示一个工作重执行的频度。
3、Interval()过程用来显式地设置重执行一个工作之间的时间间隔数。
这个过程有两个参数:
job与interval.
PROCEDUREInterval(jobINbinary_integer,IntervalINvarchar2)
job参数标识一个特定的工作。
interval参数指示一个工作重执行的频度。
4、ISubmit()过程用来用特定的工作号提交一个工作。
这个过程有五个参数:
job、what、next_date、interval与no_parse.
PROCEDUREISubmit(jobINbinary_ineger,WhatINvarchar2,next_dateIN
date,intervalINvarchar2,no_parseINbooean:
=FALSE)
这个过程与Submit()过程的唯一区别在于此job参数作为IN型参数传递且包括
一个
由开发者提供的工作号。
如果提供的工作号已被使用,将产生一个错误。
5、Next_Date()过程用来显式地设定一个工作的执行时间。
这个过程接收两个参数:
job与next_date.
PROCEDURENext_Date(jobINbinary_ineger,next_dateINdate)
job标识一个已存在的工作。
next_date参数指示了此工作应被执行的日期与时
间。
6、Remove()过程来删除一个已计划运行的工作。
这个过程接收一个参数:
PROCEDURERemove(jobINbinary_ineger);
job参数唯一地标识一个工作。
这个参数的值是由为此工作调用Submit()过程
返回的job参数的值。
已正在运行的工作不能由调用过程序删除。
7、Run()过程用来立即执行一个指定的工作。
这个过程只接收一个参数:
PROCEDURERun(jobINbinary_ineger)
job参数标识将被立即执行的工作。
8、使用Submit()过程,工作被正常地计划好。
PROCEDURESubmit(jobOUTbinary_ineger,WhatINvarchar2,next_dateIN
job参数是由Submit()过程返回的binary_ineger.这个值用来唯一标识一个工
作。
what参数是将被执行的PL/SQL代码块。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE
指示此PL/SQL代码在它第一次执行时应进行语法分析,
而FALSE指示本PL/SQL代码应立即进行语法分析。
9、User_Export()过程返回一个命令,此命令用来安排一个存在的工作以便
此工作能重新提交。
此程序有两个参数:
job与my_call.
PROCEDUREUser_Export(jobINbinary_ineger,my_callINOUTvarchar2
)
job参数标识一个安排了的工作。
my_call参数包含在它的当前状态重新提交此
工作所需要的正文。
10、What()过程应许在工作执行时重新设置此正在运行的命令。
job与what.
PROCEDUREWhat(jobINbinary_ineger,WhatINOUTvarchar2)
job参数标识一个存在的工作。
what参数指示将被执行的新的PL/SQL代码。
一个简单例子:
创建测试表SQL>
createtablea(adate);
表已创建。
创建一个自定义过程SQL>
createorreplaceproceduretestas2begin3insertintoavalues
(sysdate);
4end;
5/ 过程已创建。
创建JOBSQL>
variablejob1
number;
SQL>
SQL>
begin2dbms_job.submit
job1,'
test;
sysdate+1/1440'
--每天1440分钟,即一分钟运行
test过程一次 3end;
4/
PL/SQL过程已成功完成。
运行JOBSQL>
begin2dbms_job.run(:
job1);
3end;
4/
selectto_char(a,'
yyyy/mm/ddhh24:
mi:
)时间froma;
时间-----
--------------2008/01/0323:
51:
212008/01/0323:
52:
222008/01/0323:
53:
24
删除JOBSQL>
begin2dbms_job.remove(:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 游标 cursor 使用 定时器 job 用法 网上 收集 整理
![提示](https://static.bdocx.com/images/bang_tan.gif)
链接地址:https://www.bdocx.com/doc/22370235.html