Oracle dblink job 存储过程Word文档下载推荐.docx

上传人:b****6 文档编号:20908277 上传时间:2023-01-26 格式:DOCX 页数:9 大小:18.18KB
下载 相关 举报
Oracle dblink job 存储过程Word文档下载推荐.docx_第1页
第1页 / 共9页
Oracle dblink job 存储过程Word文档下载推荐.docx_第2页
第2页 / 共9页
Oracle dblink job 存储过程Word文档下载推荐.docx_第3页
第3页 / 共9页
Oracle dblink job 存储过程Word文档下载推荐.docx_第4页
第4页 / 共9页
Oracle dblink job 存储过程Word文档下载推荐.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

Oracle dblink job 存储过程Word文档下载推荐.docx

《Oracle dblink job 存储过程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Oracle dblink job 存储过程Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。

Oracle dblink job 存储过程Word文档下载推荐.docx

创建测试表

  SQL>

createtableTEST(adate);

  

  表已创建。

  创建一个自定义过程

createorreplaceprocedureMYPROCas

   2 begin

   3 insertintoTESTvalues(sysdate);

   4 end;

   5 /

  过程已创建。

  创建JOB

variablejob1number;

begin

   2 dbms_job.submit(:

job1,'

MYPROC;

'

sysdate,'

sysdate+1/1440'

);

  --每天1440分钟,即一分钟运行test过程一次

   3 end;

   4 /

  PL/SQL过程已成功完成。

  运行JOB

   2 dbms_job.run(:

job1);

selectto_char(a,'

yyyy/mm/ddhh24:

mi:

ss'

)时间fromTEST;

  时间

  -------------------

  2001/01/0723:

51:

21

52:

22

53:

24

  删除JOB

   2 dbms_job.remove(:

存储过程

1、创建存储过程

createorreplaceproceduretest(var_name_1intype,var_name_2outtype)as

--声明变量(变量名变量类型)

begin

--存储过程的执行体

endtest;

打印出输入的时间信息

E.g:

createorreplaceproceduretest(workDateinDate)is

dbms_output.putline(&

apos;

Theinputdateis:

&

||to_date(workDate,&

yyyy-mm-dd&

));

2、变量赋值

变量名:

=值;

E.g:

xnumber(4,2);

 

x:

=1;

3、判断语句:

if比较式thenbeginend;

endif;

E.g

createorreplaceproceduretest(xinnumber)is

ifx>

0then

=0-x;

end;

endif;

ifx=0then

x:

=1;

4、For循环

For...in...LOOP

--执行语句

endLOOP;

(1)循环遍历游标

createorreplaceproceduretest()as

Cursorcursorisselectnamefromstudent;

namevarchar(20);

fornameincursorLOOP

dbms_output.putline(name);

(2)循环遍历数组

createorreplaceproceduretest(varArrayinmyPackage.TestArray)as

--(输入参数varArray是自定义的数组类型,定义方式见标题6)

inumber;

begin

i:

--存储过程数组是起始位置是从1开始的,与java、C、C++等语言不同。

因为在Oracle中本是没有数组的概念的,数组其实就是一张

--表(Table),每个数组元素就是表中的一个记录,所以遍历数组时就相当于从表中的第一条记录开始遍历

foriin1..varArray.countLOOP 

TheNo.&

||i||&

recordinvarArrayis:

||varArray(i));

5、While循环

while条件语句LOOP

createorreplaceproceduretest(iinnumber)as

whilei<

10LOOP

begin 

i:

=i+1;

6、数组

首先明确一个概念:

Oracle中本是没有数组的概念的,数组其实就是一张表(Table),每个数组元素就是表中的一个记录。

使用数组时,用户可以使用Oracle已经定义好的数组类型,或可根据自己的需要定义数组类型。

(1)使用Oracle自带的数组类型

xarray;

--使用时需要需要进行初始化

e.g:

createorreplaceproceduretest(youtarray)is

=newarray();

y:

=x;

(2)自定义的数组类型(自定义数据类型时,建议通过创建Package的方式实现,以便于管理)

E.g(自定义使用参见标题4.2)createorreplacepackagemyPackageis

--Publictypedeclarations 

typeinfoisrecord( 

namevarchar(20), 

ynumber);

typeTestArrayistableofinfoindexbybinary_integer;

 

--此处声明了一个TestArray的类型数据,其实其为一张存储Info数据类型的Table而已,及TestArray就是一张表,有两个字段,一个是

name,一个是y。

需要注意的是此处使用了Indexbybinary_integer编制该Table的索引项,也可以不写,直接写成:

typeTestArrayis

tableofinfo,如果不写的话使用数组时就需要进行初始化:

varArraymyPackage.TestArray;

varArray:

=newmyPackage.TestArray();

endTestArray;

7.游标的使用Oracle中Cursor是非常有用的,用于遍历临时表中的查询结果。

其相关方法和属性也很多,现仅就常用的用法做一二介绍:

(1)Cursor型游标(不能用于参数传递)

createorreplaceproceduretest()is 

cusor_1Cursorisselectstd_namefromstudentwhere 

...;

--Cursor的使用方式1 

cursor_2Cursor;

selectclass_nameintocursor_2fromclasswhere...;

--Cursor的使用方式2

可使用ForxincursorLOOP....endLOOP;

来实现对Cursor的遍历

(2)SYS_REFCURSOR型游标,该游标是Oracle以预先定义的游标,可作出参数进行传递

createorreplaceproceduretest(rsCursoroutSYS_REFCURSOR)is

cursorSYS_REFCURSOR;

namevarhcar(20);

OPENcursorFORselectnamefromstudentwhere...--SYS_REFCURSOR只能通过OPEN方法来打开和赋值

LOOP

fetchcursorintoname 

--SYS_REFCURSOR只能通过fetchinto来打开和遍历exitwhencursor%NOTFOUND;

--SYS_REFCURSOR中可使用三个状态属性:

---%NOTFOUND(未找到记录信息)%FOUND(找到记录信息) 

---%ROWCOUNT(然后当前游标所指向的行位置)

rsCursor:

=cursor;

下面写一个简单的例子来对以上所说的存储过程的用法做一个应用:

现假设存在两张表,一张是学生成绩表(studnet),字段为:

stdId,math,article,language,music,sport,total,average,step 

一张是学生课外成绩表(out_school),字段为:

stdId,parctice,comment

通过存储过程自动计算出每位学生的总成绩和平均成绩,同时,如果学生在课外课程中获得的评价为A,就在总成绩上加20分。

createorreplaceprocedureautocomputer(stepinnumber)is

rsCursorSYS_REFCURSOR;

commentArraymyPackage.myArray;

mathnumber;

articlenumber;

languagenumber;

musicnumber;

sportnumber;

totalnumber;

averagenumber;

stdIdvarchar(30);

recordmyPackage.stdInfo;

get_comment(commentArray);

--调用名为get_comment()的存储过程获取学生课外评分信息

OPENrsCursorforselectstdId,math,article,language,music,sportfromstudenttwheret.step=step;

LOOP

fetchrsCursorintostdId,math,article,language,music,sport;

exitwhenrsCursor%NOTFOUND;

total:

=math+article+language+music+sport;

foriinmentArray.countLOOP 

record:

=commentArray(i);

ifstdId=record.stdIdthen 

ifment=&

A&

then 

=total+20;

gotonext;

--使用goto跳出for循环 

end;

<

continue>

>

average:

=total/5;

updatestudenttsett.total=totalandt.average=averagewheret.stdId=stdId;

endautocomputer;

--取得学生评论信息的存储过程

createorreplaceprocedureget_comment(commentArrayoutmyPackage.myArray)is

rsSYS_REFCURSOR;

commentvarchar

(1);

openrsforselectstdId,commentfromout_school

fetchrsintostdId,comment;

exitwhenrs%NOTFOUND;

record.stdId:

=stdId;

ment:

=comment;

recommentArray(i):

=record;

=i+1;

endget_comment;

--定义数组类型myArray

createorreplacepackagemyPackageisbegin

typestdInfoisrecord(stdIdvarchar(30),commentvarchar

(1));

typemyArrayistableofstdInfoindexbybinary_integer;

endmyPackage;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1