`

产生一个 类似 SL201106090001 这种格式的流水号

阅读更多

要求格式为:

    SL+当前时间+0001

 

测试表

create table Pdms_polling(
  p_id   INT  PRIMARY KEY,
  p_year date,
  p_num  varchar2(20)
);

 

-- 触发器.

CREATE OR REPLACE TRIGGER tr_auto_set_id
  AFTER INSERT ON Pdms_polling
DECLARE
  v_newID  INT;   -- 暂存主键
  v_newNum    varchar(30);  -- 新的 流水号
  v_oldNum    varchar(30);  -- 旧的流水号

  -- 游标: 用于检索 当前表的所有 流水号字段为空的数据。

  -- 将当天的所有数据,按顺序,自动编号排序

  -- 该查询结果包含三列,分别为 ID,  现有的流水号, 按照 ROW_NUMBER 排序后的流水号。
  CURSOR c_need_auto IS
    SELECT
      p_id,
      p_num,
      'SL'
        || TO_CHAR(p_year, 'YYYYMMDD')
        || TRIM(TO_CHAR(
          ROW_NUMBER() OVER(PARTITION BY TO_CHAR(p_year, 'YYYYMMDD') ORDER BY p_id ),
          '0000')) AS new_num
    FROM
      Pdms_polling
    WHERE
      EXISTS( SELECT 1 
              FROM Pdms_polling p2 
              WHERE TRUNC(p2.p_year) = TRUNC(Pdms_polling.p_year)
                AND p_num IS NULL );
BEGIN
  -- 打开游标.
  OPEN c_need_auto;
  LOOP
    -- 填充数据(主表).
    FETCH c_need_auto INTO v_newID, v_oldNum, v_newNum;
    -- 假如没有检索到(主表)数据,结束循环处理
    Exit when c_need_auto%NOTFOUND;

    -- 这里判断 旧流水号是否为 NULL, 假如为空的话,那么将其更新为  ROW_NUMBER 排序后的流水号。

    -- 需要注意的是,假如你系统,不会去删除数据的话,那么没有问题。

    -- 假如你的系统,会删除中间的数据的话,那么,会导致这里的流水号计算错误。

    -- 那么可能就要把下面的  v_oldNum IS NULL  修改为  v_oldNum IS NULL OR  v_oldNum  !=  v_newNum

    -- 结果也很明显,中间删除掉的流水号,会在某一次追加以后,被下一条依次填充上来。最后可能造成关联表的数据不匹配。
    IF v_oldNum IS NULL THEN
      UPDATE
        Pdms_polling
      SET
        p_num = v_newNum
      WHERE
        p_id = v_newID;
    END IF;
  END LOOP;
  -- 关闭游标
  CLOSE c_need_auto;
END;

 

-- 测试:

SQL> INSERT INTO Pdms_polling VALUES(1, SYSDATE, NULL);
已创建 1 行。
SQL> INSERT INTO Pdms_polling VALUES(2, SYSDATE, NULL);
已创建 1 行。
SQL> INSERT INTO Pdms_polling VALUES(3, SYSDATE, NULL);
已创建 1 行。

SQL> INSERT INTO Pdms_polling
  2    SELECT 4, SYSDATE, NULL FROM dual UNION ALL
  3    SELECT 5, SYSDATE-1, NULL FROM dual UNION ALL
  4    SELECT 6, SYSDATE+1, NULL FROM dual UNION ALL
  5    SELECT 7, SYSDATE-1, NULL FROM dual UNION ALL
  6    SELECT 8, SYSDATE+1, NULL FROM dual UNION ALL
  7    SELECT 9, SYSDATE, NULL FROM dual ;
已创建6行。

SQL> ALTER session
  2    SET nls_date_format='yyyy-mm-dd hh24:mi:ss';
会话已更改。


SQL> SELECT * FROM Pdms_polling;
      P_ID P_YEAR              P_NUM
---------- ------------------- --------------------
         1 2011-06-09 20:51:55 SL201106090001
         2 2011-06-09 20:51:55 SL201106090002
         3 2011-06-09 20:51:55 SL201106090003
         4 2011-06-09 20:51:55 SL201106090004
         5 2011-06-08 20:51:55 SL201106080001
         6 2011-06-10 20:51:55 SL201106100001
         7 2011-06-08 20:51:55 SL201106080002
         8 2011-06-10 20:51:55 SL201106100002
         9 2011-06-09 20:51:55 SL201106090005
已选择9行。
 
分享到:
评论

相关推荐

    GPS数据转换道亨SL的ORG格式

    在实际操作中,可能会有一个专门的转换工具,比如压缩包中的"GPS数据转换道亨SL的ORG格式V1.5",这个工具可能已经内置了上述所有步骤,用户只需提供输入文件和输出文件路径,即可完成转换。使用这样的工具,可以大大...

    SL0MatlabCode.rar_SL0_SL0 matlab_压缩感知 sl0_压缩感知SL0

    SL0(Simultaneous Pursuit, Simultaneous Orthogonal Matching Pursuit)算法是压缩感知(Compressed Sensing, CS)领域中的一个经典方法。压缩感知理论指出,对于稀疏信号,可以通过较少的非线性测量来重构原始...

    ThinkPad SL400 SL500 拆机手册 PDF

    这一部分详细定义了ThinkPad SL400/SL500系列的产品特性,包括其规格、配置选项等信息,为用户提供了一个全面的产品概览。 #### FRU标识 对于定制(CTO)、客户制造(CMV)和政府(GAV)版本的产品,手册还提供了如何...

    sl110,sl120,sl275,sl285,sl301sl314,sl351,sl425,sl291,sl315

    4. **组件开发**:"SL-291(JavaBeans Component Development)"这一文件名表明有一个关于JavaBeans组件开发的专题,JavaBeans是Java平台上的可重用软件组件标准。 5. **技术支持**:这些手册可能作为技术支持的一部分...

    一款纯国产USB 3.0HUB芯片,型号SL6340

    标题中的“一款纯国产USB 3.0 HUB芯片,型号SL6340”指的是一个完全由国内制造商设计和生产的USB 3.0集线器芯片,其具体型号为SL6340。USB 3.0 HUB芯片是用于扩展计算机或其他设备的USB接口数量,提供更高的数据传输...

    sl0_SL0matlab_SL0_源码

    SL0算法则提供了一个不同于L1范数的近似方法,它通过一系列半定规划(SDP)松弛来逼近L0最小化问题。 在MATLAB环境中,SL0算法通常通过编写.m文件实现。给出的文件"SL0.m"应该包含了SL0算法的具体实现。在MATLAB...

    SL源码(即用分享非常有用)

    在压缩包中,我们看到"OpenXmlPageTurn.csproj",这是一个Visual Studio项目文件,表明这个SL项目可能涉及到Open XML文档格式的处理。Open XML是一种标准格式,广泛用于Microsoft Office文档,如Word、Excel和...

    linux sl小工具

    linux sl小工具,非常有意思的小工具,一款小火车在屏幕上飞过!...sl 是一个搞笑软件或,也是一个 Unix 游戏。它会在你错误地把“ls”输入成“sl”(Steam Locomotive)后出现一辆蒸汽火车穿过你的屏幕。

    sl的一个小例子

    本篇将通过"sl的一个小例子"——TreamSL1项目,来详细解析Silverlight的基本概念和关键特性。 首先,Silverlight是一种基于插件的运行时环境,它能够嵌入到Web浏览器中,为用户提供跨平台的多媒体和交互体验。...

    java sl275 答案

    Java SL275答案是一个关于Java编程的资源集合,它提供了与SL275相关的练习题解答,旨在帮助开发者深入理解和掌握Java编程语言的核心概念和技术。这个压缩包包含的源代码是经过精心编写的,可以帮助学习者节省大量...

    SL会员商城系统

    SL会员商城系统是一款专为商业运营打造的在线平台,它集成了会员...综上所述,SL会员商城系统是一个全面的电子商务解决方案,涵盖了从设计、开发、测试到运营的全过程,旨在提供一个高效、安全、用户友好的购物环境。

    SL3204 替代HT1621

    SL3204是一款常用于替代HT1621的微控制器,...对于那些需要升级现有系统或开发新产品的工程师来说,SL3204是一个值得考虑的选择。同时,了解如何利用其内置的定时器和相关功能,对于实现高效的液晶显示控制至关重要。

    USB2.0 HUB芯片 SL2.2s

    USB2.0 HUB芯片SL2.2s是一款专为扩展USB接口设计的集成电路,它在个人电脑、移动设备和其他USB设备的连接中扮演着重要角色。SL2.2s利用了先进的Super Speed Switching (SSS)或Super STT(Super Speed Transfer)技术...

    水文监测数据通信规约SL651-2014

    智慧水务是一个利用信息化技术对水文、水质等进行监测、预警、控制的系统工程,对于提升水资源利用效率、保障水资源安全有着重要作用。 从内容部分提取,我们可以看到提及了多种通信协议和技术,例如GSM-SMS、CDMA-...

    SL811HS详细资料

    SL811HS集成了一个高性能的USB收发器,该收发器符合USB 2.0 Full Speed标准,最高数据传输速率为12 Mbps。这使得SL811HS能够在高速数据传输中表现出色,非常适合于需要快速数据交换的应用场景。 ### 注册表配置 ##...

    禄来SL66SE 操作使用手册

    - **额外的测光模式**:SL66SE相比SL66E增加了点测光模式,通过一个额外的开关实现,提高了拍摄时的灵活性。 #### 三、推荐打印页面 - **第3至6页**:这四页包含相机组件的详细图纸,并标注了参考编号,对于理解...

    sc850SL-数据手册1.0

    本手册详细介绍了SC850SL图像传感器的各项功能特性、系统架构、接口配置方法等重要内容,为开发人员提供了一个深入理解该传感器工作原理和技术细节的基础。 ##### 1. 系统描述 **1.1. 芯片概述** SC850SL是一款高...

    基于单片机 fm1702sl 家用 门禁小程序

    门禁系统是现代智能化生活的重要组成部分,特别是在家庭安全领域中起着至关重要的作用。本项目是基于单片机FM1702SL设计的一款家用门禁小程序,它...对于想要了解或开发类似系统的工程师来说,这是一个很好的学习案例。

Global site tag (gtag.js) - Google Analytics