zoukankan      html  css  js  c++  java
  • (原) Oracle按连续号对票据分组

    数据内容:
      开始   结束 
    1 61001 61011
    2 61012 61262
    3 61263 61395
    4 61396 61660
    5 61661 61975
    6 61976 62000
    7 89001 89164
    8 89165 89306
    9 89307 89573
    10 89574 89775
    11 89776 90000
    12 102001 102044
    13 102045 102255
    14 102256 102437
    15 102438 102603
    16 102604 102850
    17 102851 103000
    18 105001 105073
    19 105074 105322
    20 105323 105420
    21 105421 105595
    22 105596 105707
    23 105708 105842
    24 105843 105988

    需要得到的结果:
    61263~62000;
    89001~90000;
    102001~103000;
    105001~105988;

    Function:

     1CREATE OR REPLACE FUNCTION FUNC_GETRECKON(P_SELLID IN VARCHAR2,
     2                                          p_DateStart IN VARCHAR2,
     3                                          p_DateEnd   IN VARCHAR2)
     4  RETURN VARCHAR2 IS
     5  RESULT VARCHAR2(256);
     6
     7  /*
     8  名称:FUNC_GETRECKON
     9  创建时间:2007.12.21
    10  创建人:yugx
    11
    12  作用:按连续号对票据分组。
    13  */

    14
    15  MinNumber INT;
    16    MaxNumber INT;
    17    
    18    M_SELLID VARCHAR2(256);
    19
    20  CURSOR CUR_GETRECKON IS
    21    SELECT TO_NUMBER(TM_PEOPLERECKON.STARTTICKETNUMBER) STARTTICKETNUMBER,
    22           TO_NUMBER(TM_PEOPLERECKON.ENDTICKETNUMBER) ENDTICKETNUMBER
    23      FROM TM_PEOPLERECKON
    24     WHERE TM_PEOPLERECKON.SALESID = M_SELLID
    25         AND   TM_PEOPLERECKON.STARTTICKETNUMBER IS NOT NULL
    26         AND   TM_PEOPLERECKON.Onlinetime> to_date(p_DateStart,'yyyy-MM-dd hh24:mi:ss')
    27         AND   TM_PEOPLERECKON.Accounttime <= to_date(p_DateEnd,'yyyy-MM-dd hh24:mi:ss')
    28         ORDER BY TO_NUMBER(TM_PEOPLERECKON.STARTTICKETNUMBER);
    29  CURROW CUR_GETRECKON%ROWTYPE;
    30
    31BEGIN
    32
    33  MinNumber:=0;
    34    M_SELLID :=P_SELLID;
    35    RESULT :='';
    36    
    37    SELECT MAX(TM_PEOPLERECKON.ENDTICKETNUMBER) INTO MaxNumber
    38    FROM TM_PEOPLERECKON
    39     WHERE TM_PEOPLERECKON.SALESID = M_SELLID 
    40         AND   TM_PEOPLERECKON.Onlinetime> to_date(p_DateStart,'yyyy-MM-dd hh24:mi:ss')
    41         AND   TM_PEOPLERECKON.Accounttime <= to_date(p_DateEnd,'yyyy-MM-dd hh24:mi:ss');
    42    
    43    OPEN CUR_GETRECKON;
    44  FETCH CUR_GETRECKON INTO CURROW;
    45WHILE (CUR_GETRECKON%FOUND) LOOP
    46    IF MinNumber <> CURROW.STARTTICKETNUMBER-1
    47  THEN
    48       IF MinNumber <>0
    49         THEN
    50            RESULT := RESULT|| '~' ||  to_char(MinNumber)  || '' || to_char(CURROW.STARTTICKETNUMBER);
    51         ELSE
    52            RESULT := RESULT|| to_char(CURROW.STARTTICKETNUMBER);
    53         END IF;
    54         MinNumber:=CURROW.ENDTICKETNUMBER;
    55  ELSE
    56       MinNumber:=CURROW.ENDTICKETNUMBER;
    57         IF MinNumber = MaxNumber
    58         THEN
    59            RESULT := RESULT|| '~' ||  to_char(MaxNumber);
    60         END IF;         
    61    END IF;
    62      FETCH CUR_GETRECKON INTO CURROW;
    63END LOOP;
    64        
    65RETURN(RESULT);
    66
    67EXCEPTION
    68WHEN OTHERS THEN
    69     LFGUSER.PROC_LOG_ORA_EXCEPTION(P_ERR_NUM => SQLCODE, P_ERR_MSG => SQLERRM, P_ERR_SOURCE => 'FUNC_GETRECKON');
    70         RETURN '';
    71END FUNC_GETRECKON;
    72

     

  • 相关阅读:
    VS.NET 生成后事件
    SysVinit
    技巧:Linux I/O重定向的一些小技巧
    Ofono/Phonesim 安装和启动
    Memory Hierarchy
    Linux 技巧:让进程在后台可靠运行的几种方法 用 cron 和 at 调度作业 使用 screen 管理你的远程会话
    M. Tim Jones
    How do I install Oracle Java JDK 7?
    详谈 UNIX 环境进程异常退出
    Linux 内核剖析
  • 原文地址:https://www.cnblogs.com/spymaster/p/1014560.html
Copyright © 2011-2022 走看看