1 / 4
文档名称:

存储过程中利用游标.docx

格式:docx   大小:71KB   页数:4页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

存储过程中利用游标.docx

上传人:yinjiong623147 2016/9/27 文件大小:71 KB

下载得到文件列表

存储过程中利用游标.docx

文档介绍

文档介绍:用存储过程计算单井产量解决思路一、选择适当的参数首先,因为考虑到要查找某口井某天的产量,那么肯定就需要传入两个参数,因此,我在创建存储过程的时候首先创建了两个变量,一个为井号(***@WellIDint),另外一个为时间(***@DatetimeDateTime)二、整体思路在查询一口井的产量时存在两种情况,一种是恰好所查询的井在当天有记录,因此只需要根据输入给参数的值直接从数据库中读取即可;另一种是所查询的井在当天没有记录,这个时候需要利用近似公:S=a*(a+b+c)/m;S---------------A井的近似产量a,b,c-------分别为A,B,C井上一次的产量(最近一天记录的产量,不一定是连续的)m--------------这个平台在这一天的总产量(实际测量得到的),我们用sql语句可得到******@TmpWellProint--待查井的产量,如果没有就选最近日期的产量******@TmpWellPro=(selectWellProductfromT_WellRecordwhereWellID=***@WellIDandWellDate=***@Datetime)--,我们需要求出所查询的A井的产量,A井所在平台下所有井最近一次的产量,所在平台的产量。因此我们需要定义三个变量来存储这些值******@PlatformProint--所在井的平台的产量******@Wholeint--所在平台下的井的最近一次产量和******@TmpWellProint--待查井的产量,如果没有就选最近日期的产量对于所查询井A,如果没有值,我们就需要以最近一次的产量代替if(notexists(selectWellProductfromT_WellRecordwhereWellID=***@WellIDandWellDate=***@DatetimeandWellProductisnotnull))--如果当天无记录******@TmpWellPro=(selecttop1WellProductfromT_WellRecordwhereWellID=***@WellIDandWellDate<***@DatetimeandWellProductisnotnullorderbyWellDatedesc)--(以验证)接下来的难点是我们如何得到所查询井所在平台下的所有井的产量,显然我们先需要得到该平台下所有井的井号,然后根据井号得出每口井的产量,并相加。由于需要将每口井的产量循环求出来,我们这里需要运用到游标,游标给我们开辟一个数据的缓冲区,存放我们查询所在平台下所有井号的结果集,declareGetWholeProductionCURSORlocalFOR--定义游标selectWellIDfromT_WellwherePlatformID=(selectPlatformIDfromT_WellwhereWellID=***@WellID)--根据井号得到该平台号下面的所有井号然后可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理将各个井号的产量相加的操作。OPENGetWholeProduction--打开游标FETCHNEXTFROMGetWholeProduction