1 / 4
文档名称:

《存储过程中利用游标》.docx

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

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

分享

预览

《存储过程中利用游标》.docx

上传人:changdan5609 2021/9/21 文件大小:71 KB

下载得到文件列表

《存储过程中利用游标》.docx

相关文档

文档介绍

文档介绍:用存储过程计算单井产量
解决思路
一、选择适当的参数
首先,因为考虑到要查找某口井某天的产量,那么肯定就需要传入两个参数,因此,我在创建存储过程的时候首先创建了两个变量,一个为井号(***@WellID int),另外一个为时间(***@Datetime DateTime)
二、整体思路
在查询一口井的产量时存在两种情况,一种是恰好所查询的井在当天有记录,因此只需要根据输入给参数的值直接从数据库中读取即可;另一种是所查询的井在当天没有记录,这个时候需要利用近似公:
S= a*(a+b+c)/ m;
S---------------A井的近似产量
a,b,c-------分别为A,B,C井上一次的产量(最近一天记录的产量,不一定是连续的)
m--------------这个平台在这一天的总产量(实际测量得到的)
所查询的井当天有记录
当所查的当天有记录时,我们用sql语句可得到
declare ***@TmpWellPro int--待查井的产量,如果没有就选最近日期的产量
set ***@TmpWellPro=(select WellProduct from T_WellRecord where WellID=***@WellID and WellDate=***@Datetime)--直接读取
所查询的井当天没有记录
我们从近似公式可以看出,我们需要求出所查询的A井的产量,A井所在平台下所有井最近一次的产量,所在平台的产量。因此我们需要定义三个变量来存储这些值
declare ***@PlatformPro int--所在井的平台的产量
DECLARE ***@Whole int --所在平台下的井的最近一次产量和
declare ***@TmpWellPro int--待查井的产量,如果没有就选最近日期的产量
对于所查询井A,如果没有值,我们就需要以最近一次的产量代替
if(not exists(select WellProduct from T_WellRecord where WellID= ***@WellID and WellDate=***@Datetime and WellProduct is not null))--如果当天无记录
begin
set ***@TmpWellPro=(select top 1 WellProduct from T_WellRecord where WellID=***@WellID and WellDate<***@Datetime and WellProduct is not null order by WellDate desc)--(以验证)
接下来的难点是我们如何得到所查询井所在平台下的所有井的产量,显然我们先需要得到该平台下所有井的井号,然后根据井号得出每口井的产量,并相加。由于需要将每口井的产量循环求出来,我们这里需要运用到游标,游标给我们开辟一个数据的缓冲区,存放我们查询所在平台下所有井号的结果集,
declare GetWholeProduction CURSOR local FOR--定义游标
select WellID from T_Well where PlatformID=(select PlatformID from T_Well where WellID