`

产生一个 类似 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接口数量,提供更高的数据传输...

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

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

    sl0_SL0matlab_SL0_源码

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

    linux sl小工具

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

    sl的一个小例子

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

    斑马[ZERBRA]105SL中文字体写入打印机

    然而,在初次使用时,有些用户可能会遇到一个问题:打印机默认可能不支持中文字符打印,这给需要中文标签的企业或个人带来了困扰。但不用担心,这个问题完全可以通过添加中文字体来解决。 "斑马105SL中文字体写入...

    java sl275 答案

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

    SL会员商城系统

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

    SL3204 替代HT1621

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

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

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

    SL811HS详细资料

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

    toolbox-840D-sl-840Di-sl-V04.08.07.00

    "toolbox-840D-sl-840Di-sl-V04.08.07.00" 是一个与西门子(Siemens)工业自动化设备相关的软件工具箱,主要用于管理和控制840D sl和840Di sl系列的数控系统。840D sl是西门子高端数控系统,广泛应用于重型机械、航空...

    USB2.0 HUB芯片 SL2.2s

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

    禄来SL66SE 操作使用手册

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

Global site tag (gtag.js) - Google Analytics