欢迎来到天天文库
浏览记录
ID:14770833
大小:45.00 KB
页数:15页
时间:2018-07-30
《oracle存储过程37247》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、oracle存储过程372472010-01-28Oracle存储过程实例文章分类:数据库createorreplaceprocedureGetRecords(name_outoutvarchar2,age_ininvarchar2)asbeginselectNAMEintoname_outfromtestwhereAGE=age_in;end;createorreplaceprocedureinsertRecord(UserIDinvarchar2,UserNameinvarchar2,User
2、Ageinvarchar2)isbegininsertintotestvalues(UserID,UserName,UserAge);end;首先,在Oracle中创建了一个名为TEST_SEQ的Sequence对象,SQL语句如下:createsequenceTEST_SEQminvalue100maxvalue999startwith102incrementby1nocache;语法应该是比较易懂的,最小最大值分别用minvalue,maxvalue表示,初始值是102(这个数字是动态变化的,
3、我创建的时候设的是100,后因插入了2条数据后就自动增加了2),increment当然就是步长了。在PL/SQL中可以用test_seq.nextval访问下一个序列号,用test_seq.currval访问当前的序列号。定义完了Sequence,接下来就是创建一个存储过程InsertRecordWithSequence:--这次我修改了test表的定义,和前面的示例不同。其中,UserID是PK。createorreplaceprocedureInsertRecordWithSequence(U
4、serIDoutnumber,UserNameinvarchar2,UserAgeinnumber)isbegininsertintotest(id,name,age)--插入一条记录,PK值从Sequece获取values(test_seq.nextval,UserName,UserAge);/*返回PK值。注意Dual表的用法*/selecttest_seq.currvalintoUserIDfromdual;endInsertRecordWithSequence;为了让存储过程返回结果集,必
5、须定义一个游标变量作为输出参数。这和SqlServer中有着很大的不同!并且还要用到Oracle中“包”(Package)的概念,似乎有点繁琐,但熟悉后也会觉得很方便。关于“包”的概念,有很多内容可以参考,在此就不赘述了。首先,我创建了一个名为TestPackage的包,包头是这么定义的:createorreplacepackageTestPackageistypemycursorisrefcursor;--定义游标变量procedureGetRecords(ret_cursoroutmycurs
6、or);--定义过程,用游标变量作为返回参数endTestPackage;包体是这么定义的:createorreplacepackagebodyTestPackageis/*过程体*/procedureGetRecords(ret_cursoroutmycursor)asbeginopenret_cursorforselect*fromtest;endGetRecords;endTestPackage;小结:包是Oracle特有的概念,SqlServer中找不到相匹配的东西。在我看来,包有点像VC
7、++的类,包头就是.h文件,包体就是.cpp文件。包头只负责定义,包体则负责具体实现。如果包返回多个游标,则DataReader会按照您向参数集合中添加它们的顺序来访问这些游标,而不是按照它们在过程中出现的顺序来访问。可使用DataReader的NextResult()方法前进到下一个游标。createorreplacepackageTestPackageistypemycursorisrefcursor;procedureUpdateRecords(id_ininnumber,newNamein
8、varchar2,newAgeinnumber);procedureSelectRecords(ret_cursoroutmycursor);procedureDeleteRecords(id_ininnumber);procedureInsertRecords(name_ininvarchar2,age_ininnumber);endTestPackage;包体如下:createorreplacepackagebodyTestPackageisprocedureUpdateRec
此文档下载收益归作者所有