这几天写的存储过程语句进行备份下

来源:互联网 发布:evisu淘宝正品 编辑:程序博客网 时间:2024/05/18 22:54
     
CREATE OR REPLACE PACKAGE scjk_gaugingstation ---Author: lshizhan    ---created:2013-07-23    ---Purpose:提供水位站实时水位(河道站点、水库站点、水文站点)ISPROCEDURE  RiverwayRealTimeWaterLevel(       --主要用来查询河道水情的实时信息       --站点编号       stcd1  in varchar2,       --今日8时时间       eightTime  in varchar2,       ------开始时间       beginTime  in varchar2,       ------结束时间       endTime    in varchar2,       ---最高水位       maxZ      out  number,       ---最低水位       minZ      out number,       ---8点水位       eightTimeZ out number,       --实时水位       realTimeZ  out number,         --数据库入库时间       updatetime       out  varchar2       );PROCEDURE   RiverwayHistroyMaxandMin(       --主要用来查询河道水情历史最高和最低水位       stcd1  in varchar2,       --开始时间       beginTime in varchar2,       --结束时间       endTime  in varchar2,       ---最高水位       maxQ      out  number,       ---最低水位       minQ      out number);         PROCEDURE ReservoirwayRealTimeWaterLevel(       --主要用来查询水库水情的实时信息       --站点编号       stcd1  in varchar2,       --今日8时时间       eightTime  in varchar2,       ------开始时间       beginTime  in varchar2,       ------结束时间       endTime    in varchar2,       ---最高水位       maxZ      out  number,       ---最低水位       minZ      out number,       ---8点水位       eightTimeZ out number,       --实时水位       realTimeZ  out number,         --数据库入库时间       updatetime       out  varchar2       );  PROCEDURE ReservoirwayHistroyMaxandMin(       --主要用来查询水库水情历史最高和最低水位       stcd1  in varchar2,       --开始时间       beginTime in varchar2,       --结束时间       endTime  in varchar2,       ---最高水位       maxQ      out  number,       ---最低水位       minQ      out number);end scjk_gaugingstation;CREATE OR REPLACE PACKAGE  BODY  scjk_gaugingstationIS  PROCEDURE  RiverwayRealTimeWaterLevel(       --站点编号       stcd1  in varchar2,       --今日8时时间       eightTime  in varchar2,       ------开始时间       beginTime  in varchar2,       ------结束时间       endTime    in varchar2,       ---最高水位       maxZ      out  number,       ---最低水位       minZ      out number,       ---8点水位       eightTimeZ out number,        --实时水位       realTimeZ  out number,       --数据库入库时间       updatetime       out  varchar2)   is     v_maxZ  number:=-1000000;     v_minZ  number:=-1000000;     v_eightZ number:=-1000000;     v_realTimeZ number:=-1000000;     v_updateTime varchar2(50);     v_eightNum  number:=0;     v_realNum   number:=0;   begin       --查询某个时间段内最低,最高水位       select   nvl(min(t1.z),-1000000),nvl(max(t1.z),-1000000) into v_minZ,v_maxZ  from   st_river_r  t1        where ltrim(rtrim(t1.stcd))= stcd1        and t1.tm>= to_date(beginTime,'YYYY-MM-DD HH24:MI:SS')        and t1.tm<= to_date(endTime,'YYYY-MM-DD HH24:MI:SS');        minZ := v_minZ;        maxZ:=  v_maxZ;        --查询8点水位        --查询是否有八点水位的数据        select count(*) into v_eightNum from  st_river_r  t1        where  ltrim(rtrim(t1.stcd))= stcd1        and t1.tm = to_date(eightTime,'YYYY-MM-DD HH24:MI:SS');                if(v_eightNum = 0) then           v_eightZ := -1000000;        else        --查询8点水位        select t1.z into v_eightZ from  st_river_r  t1        where  ltrim(rtrim(t1.stcd))= stcd1        and t1.tm = to_date(eightTime,'YYYY-MM-DD HH24:MI:SS');        end if;        eightTimeZ:=v_eightZ;        --查询是否有实时水位的数据        select count(*) into v_realNum from (select t1.z,t1.tm  from  st_river_r t1         where ltrim(rtrim(t1.stcd))= stcd1            order by t1.tm desc ) where ROWNUM =1;                if(v_realNum = 0) then           v_realTimeZ := -1000000;        else         --查询实时水位        select nvl(z,-1000000),to_char(tm,'YYYY-MM-DD HH24:MI:SS') into v_realTimeZ,v_updateTime from (select t1.z,t1.tm  from  st_river_r t1         where ltrim(rtrim(t1.stcd))= stcd1            order by t1.tm desc ) where ROWNUM =1;        end if;        realTimeZ:=v_realTimeZ;        updateTime:=v_updateTime; exception    when no_data_found then           dbms_output.put_line('error'); end; procedure RiverwayHistroyMaxandMin(       stcd1  in varchar2,       --开始时间       beginTime in varchar2,       --结束时间       endTime  in varchar2,       ---最高水位       maxQ      out  number,       ---最低水位       minQ      out number)   is      v_maxQ number:=0;      v_minQ number:=0;  begin       if(beginTime is null or endTime is null)  then       --查询最低,最高水位       select   nvl(min(t1.z),-100000),nvl(max(t1.z),-100000) into v_minQ,v_maxQ from   st_river_r  t1       where ltrim(rtrim(t1.stcd))= stcd1 ;        else          --根据时间段查询最低水位            select    nvl(min(t1.z),-100000),nvl(max(t1.z),-100000) into v_minQ,v_maxQ from   st_river_r  t1             where ltrim(rtrim(t1.stcd))= stcd1             and t1.tm>=to_date(beginTime,'YYYY-MM-DD HH24:MI:SS')              and t1.tm<=to_date(endTime,'YYYY-MM-DD HH24:MI:SS');        end if;        maxQ:=v_maxQ;        minQ:=v_minQ;  exception    when no_data_found then           dbms_output.put_line('error'); end;  PROCEDURE ReservoirwayRealTimeWaterLevel(       --主要用来查询水库水情的实时信息        --站点编号       stcd1  in varchar2,       --今日8时时间       eightTime  in varchar2,       ------开始时间       beginTime  in varchar2,       ------结束时间       endTime    in varchar2,       ---最高水位       maxZ      out  number,       ---最低水位       minZ      out number,       ---8点水位       eightTimeZ out number,        --实时水位       realTimeZ  out number,       --数据库入库时间       updatetime       out  varchar2)   is     v_maxZ  number:=-1000000;     v_minZ  number:=-1000000;     v_eightZ number:=-1000000;     v_realTimeZ number:=-1000000;     v_updateTime varchar2(50);     v_eightNum  number:=0;     v_realNum   number:=0;   begin       --查询某个时间段内最低,最高水位       select   nvl(min(t1.rz),-1000000),nvl(max(t1.rz),-1000000) into v_minZ,v_maxZ  from   ST_RSVR_R  t1        where ltrim(rtrim(t1.stcd))= stcd1        and t1.tm>= to_date(beginTime,'YYYY-MM-DD HH24:MI:SS')        and t1.tm<= to_date(endTime,'YYYY-MM-DD HH24:MI:SS');        minZ := v_minZ;        maxZ:=  v_maxZ;        --查询8点水位        --查询是否有八点水位的数据        select count(*) into v_eightNum from  ST_RSVR_R  t1        where  ltrim(rtrim(t1.stcd))= stcd1        and t1.tm = to_date(eightTime,'YYYY-MM-DD HH24:MI:SS');                if(v_eightNum = 0) then           v_eightZ := -1000000;        else        --查询8点水位        select t1.rz into v_eightZ from  ST_RSVR_R  t1        where  ltrim(rtrim(t1.stcd))= stcd1        and t1.tm = to_date(eightTime,'YYYY-MM-DD HH24:MI:SS');        end if;        eightTimeZ:=v_eightZ;        --查询是否有实时水位的数据        select count(*) into v_realNum from (select t1.rz,t1.tm  from  ST_RSVR_R t1         where ltrim(rtrim(t1.stcd))= stcd1            order by t1.tm desc ) where ROWNUM =1;                if(v_realNum = 0) then           v_realTimeZ := -1000000;        else         --查询实时水位        select nvl(rz,-1000000),to_char(tm,'YYYY-MM-DD HH24:MI:SS') into v_realTimeZ,v_updateTime from (select t1.rz,t1.tm  from  ST_RSVR_R t1         where ltrim(rtrim(t1.stcd))= stcd1            order by t1.tm desc ) where ROWNUM =1;        end if;        realTimeZ:=v_realTimeZ;        updateTime:=v_updateTime; exception    when no_data_found then           dbms_output.put_line('error'); end;  PROCEDURE ReservoirwayHistroyMaxandMin(       --主要用来查询历史最高和最低水位        stcd1  in varchar2,       --开始时间       beginTime in varchar2,       --结束时间       endTime  in varchar2,       ---最高水位       maxQ      out  number,       ---最低水位       minQ      out number)   is      v_maxQ number:=0;      v_minQ number:=0;  begin       if(beginTime is null or endTime is null)  then       --查询最低,最高水位       select   nvl(min(t1.rz),-100000),nvl(max(t1.rz),-100000) into v_minQ,v_maxQ from   ST_RSVR_R  t1       where ltrim(rtrim(t1.stcd))= stcd1 ;        else          --根据时间段查询最低水位            select    nvl(min(t1.rz),-100000),nvl(max(t1.rz),-100000) into v_minQ,v_maxQ from   ST_RSVR_R  t1             where ltrim(rtrim(t1.stcd))= stcd1             and t1.tm>=to_date(beginTime,'YYYY-MM-DD HH24:MI:SS')              and t1.tm<=to_date(endTime,'YYYY-MM-DD HH24:MI:SS');        end if;        maxQ:=v_maxQ;        minQ:=v_minQ;  exception    when no_data_found then           dbms_output.put_line('error'); end;END  scjk_gaugingstation;


 

create or replace function getCountryAndCity return str_list--返回所有县/市的名称is       o_data   str_list:=str_list();       cursor c is           select distinct(ADDVCD) from ST_ADDVCD_D;       i        number:=1;begin    open c;       loop       o_data.extend();          fetch c into o_data(i);             exit when(c%notfound);           i:=i+1;       end loop;   return o_data;end getCountryAndCity;


 

create or replace function getRainSumByAddvcd (     --统计各个县市某段时间内的降雨总量     --市县编号     addvcd1 in varchar2,     --开始时间     beginTime in varchar2,     --结束时间     endTime   in varchar2)return numberis       o_data   str_list:=str_list();       cursor c is           select  t.stcd from st_stbprp_b t                 where  rtrim(ltrim(t.addvcd))=rtrim(ltrim(addvcd1));       i        number:=1;       drpsum   number:=0;       temp     number:=0;begin    --用游标获取县、市下面的站点    open c;       loop         o_data.extend();            fetch c into o_data(i);               exit when(c%notfound);             i:=i+1;       end loop;        --遍历站点,取得每个站点的降雨量    FOR i IN 1 .. o_data.count LOOP       --如果没有开始时间或者结束时间       if(beginTime is null or endTime is null) then           return 0;       else       --查询这段时间内的降雨总量          select  getRainSumByStationId(o_data(i),beginTime,endTime)           into temp  from   dual;           drpsum:=drpsum+temp;       end if;    END LOOP ;   return drpsum;end getRainSumByAddvcd;


 

 

create or replace function getRainSumByStationId (     --统计各个县市某段时间内的降雨总量     --市县编号     stcd1 in varchar2,     --开始时间     beginTime in varchar2,     --结束时间     endTime   in varchar2)return numberis     drpSum  number:=0;begin       --如果没有开始时间或者结束时间       if(beginTime is null or endTime is null) then           return 0;       else       --查询这段时间内的降雨总量          select  nvl(sum(r.drp),0) into drpSum from ST_PPTN_R r              where rtrim(ltrim(r.stcd))=rtrim(ltrim(stcd1))              and r.tm>=to_date(beginTime,'YYYY-MM-DD HH24:MI:SS')               and r.tm<=to_date(endTime,'YYYY-MM-DD HH24:MI:SS');       end if;   return drpSum;end getRainSumByStationId;


 

 

create or replace procedure getRainFallMessage(    --开始时间    beginTime in varchar2,    --结束时间    endTime   in varchar2,    --返回市、县列表    citys  out str_list,    --返回市、县降雨总量    sums   out num_list)is   v_citys   str_list:=str_list();   v_sums    num_list:=num_list();   v_cityNames str_list:=str_list();   v_hasCountory  number:=0;begin   --获取所有县/市的行政区划编码   select getCountryAndCity() into v_citys from dual;   --遍历,获取每个县/市的降雨总量   for i in 1 .. v_citys.count loop      select count(*)  into  v_hasCountory from st_addvcd_d t where             rtrim(ltrim(t.addvcd))= rtrim(ltrim(v_citys(i)));      if(v_hasCountory<>0)  then         v_sums.extend();         v_cityNames.extend();         --取得县/市名称         select t.addvnm into v_cityNames(i)               from st_addvcd_d t where                 rtrim(ltrim(t.addvcd))= rtrim(ltrim(v_citys(i)));         --取得降雨量         select getRainSumByAddvcd(v_citys(i),beginTime,endTime)           into v_sums(i) from dual;         dbms_output.put_line(v_cityNames(i) ||' ' || v_sums(i));       end if;   end loop;      citys:=v_cityNames;   sums:=v_sums;end;


 

 

create or replace procedure getStationRainFallMessage(--获取站点的时段降雨总量和经纬度    --站点编号    stcd1     in varchar2,    --开始时间    beginTime in varchar2,    --结束时间    endTime   in varchar2,    --站点总降雨量    drpSum    out  number,    --站点经度    jingdu    out varchar2,    --站点纬度    weidu     out  varchar2)is    v_drpSum  number:=0;    v_weidu   number:=0;    v_jingdu  number:=0;begin     --获取该站点的降雨总量     select getRainSumByStationId(stcd1,beginTime,endTime)        into v_drpSum from dual;     drpSum:=v_drpSum;          begin     --获取该站点的经度和纬度     select  t.lgtd into v_jingdu from st_stbprp_b t      where t.stcd =stcd1;         EXCEPTION WHEN NO_DATA_FOUND THEN              v_jingdu:=-10000;     end;          begin     select  t.lttd into v_weidu from st_stbprp_b t      where t.stcd =stcd1;         EXCEPTION WHEN NO_DATA_FOUND THEN              v_weidu:=-10000;     end;           jingdu:=v_jingdu;     weidu:=v_weidu;end;


 

CREATE OR REPLACE PACKAGE SCJK_RAINFALLMESSAGE is  ---Author: lshizhan    ---created:2013-07-23    ---Purpose:提供降雨量情况的查询,包括县/市降雨量和站点降雨量 procedure getRainFallMessage(    --开始时间    beginTime in varchar2,    --结束时间    endTime   in varchar2,    --返回市、县列表    citys  out str_list,    --返回市、县降雨总量    sums   out num_list,    cityHasStation out num_list);procedure getStationRainFallMessage(--获取站点的时段降雨总量和经纬度    --站点编号    stcd1     in varchar2,    --开始时间    beginTime in varchar2,    --结束时间    endTime   in varchar2,    --站点总降雨量    drpSum    out  number,    --站点经度    jingdu    out number,    --站点纬度    weidu     out  number,    --返回站点所在的区域    location  out varchar);end  SCJK_RAINFALLMESSAGE;


CREATE OR REPLACE PACKAGE  BODY  SCJK_RAINFALLMESSAGEISprocedure getRainFallMessage(    --开始时间    beginTime in varchar2,    --结束时间    endTime   in varchar2,    --返回市、县列表    citys  out str_list,    --返回市、县降雨总量    sums   out num_list,    cityHasStation out num_list)is   v_citys   str_list:=str_list();   v_sums    num_list:=num_list();   v_cityNames str_list:=str_list();   v_cityHasStation  num_list:=num_list();   v_hasCountory  number:=0;begin   --获取所有县/市的行政区划编码   select getCountryAndCity() into v_citys from dual;   --遍历,获取每个县/市的降雨总量   for i in 1 .. v_citys.count loop      select count(*)  into  v_hasCountory from st_addvcd_d t where           rtrim(ltrim(t.addvcd))= rtrim(ltrim(v_citys(i)));      if(v_hasCountory<>0)  then         v_sums.extend();         v_cityNames.extend();         v_cityHasStation.extend();         --取得县/市名称         select t.addvnm into v_cityNames(i)              from st_addvcd_d t where               rtrim(ltrim(t.addvcd))= rtrim(ltrim(v_citys(i)));         --取得县/市下面有几个降雨量统计站点         select count(*)   into v_cityHasStation(i)                from  st_stbprp_b t where             rtrim(ltrim(t.addvcd))= rtrim(ltrim(v_citys(i)));         --取得降雨量         select getRainSumByAddvcd(v_citys(i),beginTime,endTime)           into v_sums(i) from dual;         dbms_output.put_line(v_cityNames(i) ||' ' || v_sums(i));       end if;   end loop;   citys:=v_cityNames;   sums:=v_sums;   cityHasStation:=v_cityHasStation;end;procedure getStationRainFallMessage(--获取站点的时段降雨总量和经纬度    --站点编号    stcd1     in varchar2,    --开始时间    beginTime in varchar2,    --结束时间    endTime   in varchar2,    --站点总降雨量    drpSum    out  number,    --站点经度    jingdu    out number,    --站点纬度    weidu     out  number,    --返回站点所在的区域    location  out varchar)is    v_drpSum  number:=0;    v_weidu   number:=0;    v_jingdu  number:=0;    v_location varchar(50);begin     --获取该站点的降雨总量     select getRainSumByStationId(stcd1,beginTime,endTime)        into v_drpSum from dual;     drpSum:=v_drpSum;     begin     --获取该站点的经度和纬度     select  t.lgtd into v_jingdu from st_stbprp_b t     where   rtrim(ltrim(t.stcd))=rtrim(ltrim(stcd1));         EXCEPTION WHEN NO_DATA_FOUND THEN              v_jingdu:=-10000;     end;     begin     --获取站点所在区域       select t2.addvnm into v_location from  st_stbprp_b t1,ST_ADDVCD_D t2       where  rtrim(ltrim(t1.stcd))=rtrim(ltrim(stcd1)) and         rtrim(ltrim(t1.addvcd))=rtrim(ltrim(t2.addvcd));       EXCEPTION WHEN NO_DATA_FOUND THEN             v_location:='';     end;     begin     --获取纬度     select  t.lttd into v_weidu from st_stbprp_b t     where  rtrim(ltrim(t.stcd))=rtrim(ltrim(stcd1));         EXCEPTION WHEN NO_DATA_FOUND THEN              v_weidu:=-10000;     end;     jingdu:=v_jingdu;     weidu:=v_weidu;     location:=v_location;end;END  SCJK_RAINFALLMESSAGE;


 

 

CREATE OR REPLACE PACKAGE scjk_ReservoirReportForms ---Author: lshizhan    ---created:2013-07-27    ---Purpose:提供水库综合报表isprocedure getReservoirReportForms(      --水库编号      stcds    in    str_list,      --水库名称列表      names    out   str_list,      --水库实时水位列表      shuiweis  out   num_list,      --水库实时降雨列表      jiangyus  out   num_list,      --水库库容      kurongs   out   num_list);end  scjk_ReservoirReportForms;CREATE OR REPLACE PACKAGE  BODY scjk_ReservoirReportFormsisprocedure getReservoirReportForms(      --水库编号      stcds    in    str_list,      --水库名称列表      names    out   str_list,      --水库实时水位列表      shuiweis  out   num_list,      --水库实时降雨列表      jiangyus  out   num_list,      --水库库容      kurongs   out   num_list)is    v_names   str_list:=str_list();    v_shuiweis  num_list:=num_list();    v_jiangyus  num_list:=num_list();    v_kurongs   num_list:=num_list();begin   --遍历水库编号获取信息   for i in 1.. stcds.count loop     v_names.extend();     v_shuiweis.extend();     v_jiangyus.extend();     v_kurongs.extend();     begin       --获取水库名称       select  t1.stnm into v_names(i) from st_stbprp_b t1       where  rtrim(ltrim(t1.stcd)) =  rtrim(ltrim(stcds(i)));       EXCEPTION WHEN NO_DATA_FOUND THEN             v_names(i):='';     end;     begin        --获取水库实时水位        select rz into v_shuiweis(i)         from (select t1.rz  from  ST_RSVR_R t1           where ltrim(rtrim(t1.stcd))= stcds(i)            order by t1.tm desc ) where ROWNUM =1;      EXCEPTION WHEN NO_DATA_FOUND THEN             v_shuiweis(i):=-10000;      end;      begin        --获取水库实时库容        select w into v_kurongs(i)         from (select t1.w  from  ST_RSVR_R t1           where ltrim(rtrim(t1.stcd))= stcds(i)            order by t1.tm desc ) where ROWNUM =1;      EXCEPTION WHEN NO_DATA_FOUND THEN             v_kurongs(i):=-10000;      end;      begin        --获取水库实时雨量        select drp into v_jiangyus(i)         from (select t1.drp  from  ST_PPTN_R t1           where ltrim(rtrim(t1.stcd))= stcds(i)            order by t1.tm desc ) where ROWNUM =1;      EXCEPTION WHEN NO_DATA_FOUND THEN             v_jiangyus(i):=-10000;      end;   end loop;   names:=v_names;   shuiweis:=v_shuiweis;   jiangyus:=v_jiangyus;   kurongs:=v_kurongs;end;end  scjk_ReservoirReportForms;


 

原创粉丝点击