`

区间值的验证

阅读更多
create table TEST3
(
  n1 NUMBER,
  n2 NUMBER
);
delete from test3;
commit;
insert into test3(n1,n2) values(5,50);
insert into test3(n1,n2) values(60,80);
insert into test3(n1,n2) values(90,100);
insert into test3(n1,n2) values(200,300);
commit;
select * from test3;
select *
      from (select t.n1 rec_firest,
                   t.n2 rec_second,
                   nvl(lag(n2, 1) over(order by t.n1), 0) FirstValue,
                   t.n1 secondValue,
                   t.n2 thirdValue,
                   nvl(lead(n1, 1) over(order by t.n1), 99999999999999) LastValue
              from test3 t
             order by t.n1) x
     where (x.firstValue < 10 and x.secondValue > 20)
        or (x.thirdValue < 10 and x.lastValue > 20);
/*
验证区间范围(正向验证)
例如 5   -  50
     60  -  80
     90  -  100 
     200 -  300
     
验证(1:验证通过 0:验证失败)
     1   -  4  :return 1
     10  -  20 :return 0
     51  -  55 :return 1
     35  -  99 :reutrn 0
     59  -  88 :reutrn 0
     301 -  400:return 1
*/
create or replace function checkIntervalPositive(in_min test3.n1%type,
                                         in_max test3.n2%type)
  return number is
  cursor check_Interval is
    Select *
      From (With Tmp_x As (Select t.n1 rec_firest,
                                  t.n2 rec_second,
                                  Nvl(Lag(t.N2, 1) Over(Order By t.N1), 0) FirstValue,
                                  t.N1 secondValue,
                                  t.N2 thirdValue,
                                  Nvl(Lead(t.N1, 1) Over(Order By t.N1),
                                      999999999) LastValue
                             From Test3 t
                            Order By t.N1)
             Select Case
                      When (Select Count(1) From Tmp_x) = 0 Then
                       -1
                      Else
                       Null
                    End rec_firest,
                    Case
                      When (Select Count(1) From Tmp_x) = 0 Then
                       -1
                      Else
                       Null
                    End rec_second,
                    Case
                      When (Select Count(1) From Tmp_x) = 0 Then
                       0
                      Else
                       null
                    End FirstValue,
                    Case
                      When (Select Count(1) From Tmp_x) = 0 Then
                       -1
                      Else
                       Null
                    End secondValue,
                    Case
                      When (Select Count(1) From Tmp_x) = 0 Then
                       -1
                      Else
                       Null
                    End thirdValue,
                    Case
                      When (Select Count(1) From Tmp_x) = 0 Then
                       999999999
                      Else
                       null
                    End LastValue
               From Dual
             union all
             Select *
               From Tmp_x
             
             ) x
              Where 1 = 1
                And x.FirstValue is not null
                and ((x.firstValue < in_min and x.secondValue > in_max) or
                    (x.thirdValue < in_min and x.lastValue > in_max));

  type rec_row is RECORD(
    rec_firest  test3.n1%type,
    rec_second  test3.n2%type,
    FirstValue  number,
    secondValue test3.n1%type,
    thirdValue  test3.n2%type,
    LastValue   number);
  temp_row rec_row;
begin
  if in_min is null or in_max is null then
    return 0;
  end if;
  open check_Interval;
  fetch check_Interval
    into temp_row;
  IF (check_Interval%FOUND) THEN
    dbms_output.put_line('起始值   |  终止值  | 当前行的上一行终止值  |  当前起始值  |  当前终止值  |  当前行的下一行起始值');
    while check_Interval%found loop
      dbms_output.put_line('    ' || temp_row.rec_firest || '         ' ||
                           temp_row.rec_second || '              ' ||
                           temp_row.FirstValue || '                   ' ||
                           temp_row.rec_second || '                ' ||
                           temp_row.thirdValue || '                  ' ||
                           temp_row.LastValue);
      fetch check_Interval
        into temp_row;
    end loop;
    CLOSE check_Interval;
    RETURN 1;
  END IF;
  close check_Interval;
  return 0;
end;
declare 
 returnNumber_ number;
begin
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
  returnNumber_ := checkIntervalPositive(1, 4);
  dbms_output.put_line('1   -  4   :=' || returnNumber_);
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
  returnNumber_ := checkIntervalPositive(10, 20);
  dbms_output.put_line('10  -  20  :=' || returnNumber_);
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
  returnNumber_ := checkIntervalPositive(51, 55);
  dbms_output.put_line('51  -  55  :=' || returnNumber_);
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
  returnNumber_ := checkIntervalPositive(35, 99);
  dbms_output.put_line('35  -  99  :=' || returnNumber_);
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
  returnNumber_ := checkIntervalPositive(51, 55);
  dbms_output.put_line('59  -  88  :=' || returnNumber_);
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
  returnNumber_ := checkIntervalPositive(301, 400);
  dbms_output.put_line('301 -  400 :=' || returnNumber_);
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
end;
/*
验证区间范围(反向验证)
例如 5   -  50
     60  -  80
     90  -  100 
     200 -  300
     
验证(0:验证通过 1:验证失败)
     1   -  4  :return 0
     10  -  20 :return 1
     51  -  55 :return 0
     35  -  99 :reutrn 1
     59  -  88 :reutrn 1
     301 -  400:return 0
*/
create or replace function checkIntervalReverse(in_min test3.n1%type,
                                                in_max test3.n2%type)
  return number is
  cursor check_Interval is
    Select *
      From TEST3 t
     Where ((t.N1 > in_min And t.N1 < in_max) Or
           (t.N2 > in_min And t.N2 < in_max))
        Or (in_min > t.N1 And in_max < t.N2);
  temp_row check_Interval%Rowtype;
begin
  if in_min is null or in_max is null then
    return 0;
  end if;
  open check_Interval;
  fetch check_Interval
    into temp_row;
  IF (check_Interval%FOUND) THEN
    CLOSE check_Interval;
    RETURN 1;
  END IF;
  close check_Interval;
  return 0;
end;
declare 
 returnNumber_ number;
begin
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
  returnNumber_ := checkIntervalReverse(1, 4);
  dbms_output.put_line('1   -  4   :=' || returnNumber_);
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
  returnNumber_ := checkIntervalReverse(10, 20);
  dbms_output.put_line('10  -  20  :=' || returnNumber_);
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
  returnNumber_ := checkIntervalReverse(51, 55);
  dbms_output.put_line('51  -  55  :=' || returnNumber_);
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
  returnNumber_ := checkIntervalReverse(35, 99);
  dbms_output.put_line('35  -  99  :=' || returnNumber_);
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
  returnNumber_ := checkIntervalReverse(51, 55);
  dbms_output.put_line('59  -  88  :=' || returnNumber_);
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
  returnNumber_ := checkIntervalReverse(301, 400);
  dbms_output.put_line('301 -  400 :=' || returnNumber_);
  dbms_output.put_line('----------------------------------------------------------------------------------------------------------------------------');
end;
分享到:
评论

相关推荐

    论文研究-广义区间值直觉模糊数及其在工位评估中的应用.pdf

    论文研究-广义区间值直觉模糊数及其在工位评估中的应用.pdf, ... 最后将广义区间值直觉模糊数的概念应用于生产线人工工位的 绩效评估案例中, 从而验证了本文提出方法的有效性和实用性.

    一种区间值聚类的数据挖掘方法

    ### 一种区间值聚类的数据挖掘方法 #### 概述 本文介绍了一种创新的数据挖掘技术——区间值聚类方法,旨在改进传统数据挖掘技术在处理复杂数据集时的局限性。该方法通过将数据库中的数据按属性进行聚类,并划分成...

    区间值三角模糊数的距离

    区间值三角模糊数的距离研究,属于模糊数学领域中模糊集理论的一个分支,涉及对不确定信息的处理。本文由孙丽娜和宋涛撰写,提出了一种新的距离概念,并利用相平面的概念给出了计算方法,并验证了所提出概念的科学性...

    不协调区间值决策系统的最大分布约简.pdf

    【不协调区间值决策系统与最大分布约简】 在信息技术和人工智能领域,决策系统是用于支持复杂决策过程的重要工具。不协调区间值决策系统是一种处理不确定性和不完整性信息的模型,它允许决策者对属性值给出区间估计...

    基于粒子群算法求解区间值板坯设计优化问题.pdf

    基于粒子群算法求解区间值板坯设计优化问题的研究主要涉及了以下几个方面的知识点: 1. 粒子群优化算法(Particle Swarm Optimization, PSO): 粒子群优化算法是一种基于群体智能的优化算法,灵感来源于鸟群的觅食...

    论文研究-属性合成区间值信息系统的0-1形式背景研究.pdf

    区间值信息系统是常见的信息系统之一。针对相同论域上的区间值信息系统给出属性合成的区间值信息系统;将形式背景的基本理论引入到合成区间值信息系统中,讨论利用子形式背景直接构造原形式背景;进而研究子形式背景...

    论文研究-区间值Vague集在多传感器信息融合中的应用.pdf

    采用区间值Vague集表达多传感器信息融合问题,提出了一种新的融合方法。定义区间值Vague集的距离和得分函数,利用关系矩阵确定各传感器的综合支持度,进而得到目标的综合得分函数,给出融合结果。实例分析验证了方法...

    中科大区间树查找报告

    - 如果不重叠,则根据目标区间的key值和当前节点左子树的最大值(max)来决定搜索方向: - 若目标区间的key值小于左子树的最大值,则向左子树搜索; - 否则,向右子树搜索。 - 这样的策略可以确保即使目标区间与...

    区间优化工具以及程序

    区间优化工具以及程序,INTLAB完全是用Matlab编写的.自我验证方法 密集的线性系统(也包括内部包含和结构化矩阵) 稀疏的spd线性系统 非线性方程组 几个全球性例程: 非线性方程组的所有根 验证了全局优化 验证约束...

    参考区间验证与定义:生物医学参考区间验证与定义工具-matlab开发

    使用非参数方法验证、传输和定义实验室测试测量的参考区间的多合一直观工具。 提供: 1) 自动检查数据分布、数据清洗、异常值去除2) 基于数据特征和统计数据的参考区间的转换和引导。 3) 自动划分男性和女性的参考...

    NCCLS-C28-A2临床实验室如何确定和建立生物区间.doc

    建立参考区间的方法步骤包括:选择适当的参考对象、确定参考值、估算参考区间、验证参考区间等。这些步骤都是确保参考区间的可靠性和实用性的关键。 三、选择参考对象 选择参考对象是建立参考区间的第一步骤。这个...

    R语言区间估计实验报告

    通过绘制100个区间的图形,可以直观地看到不同置信水平下,参数真值被覆盖的频率,验证了置信区间的合理性。 五、实验总结 本次实验加深了对区间估计的理解,同时也锻炼了R语言的操作技能,特别是对统计函数的运用...

    不完备序区间值决策系统中所有可信规则的获取 (2014年)

    研究了含区间值的不完备复杂信息系统,其不仅包含遗漏型未知属性值,而且属性值域为全序集.根据区间值特点给出其遗漏型和填充式区间值概念,并定义了不完备序区间值决策系统;然后,提出了区间段值概念和基于区间段...

Global site tag (gtag.js) - Google Analytics