PROCEDURE get_sheetid(i_topic IN VARCHAR2, o_newsheetid OUT VARCHAR2) IS
    PRAGMA AUTONOMOUS_TRANSACTION;
    v_sheettype NUMBER; --代码名称
  BEGIN
    SELECT t.sheettype
      INTO v_sheettype
      FROM sheetidrule t
     WHERE t.sheettypename = i_topic
       FOR UPDATE;
    ---调用函数返回sheetid
    tl_getnewsheetid(v_sheettype, '', o_newsheetid);
    commit;
  END get_sheetid;

CREATE OR REPLACE PROCEDURE JVI2.TL_GetNewSheetID
(
  I_SheetType         IN VARCHAR2,
  I_SpecifiedPrefix   IN VARCHAR2,
  O_NewSheetID        OUT VARCHAR2
)
AS
-------------------------------------------------------------
--TL_GetNewSheetID  接口库取单据号码过程
--断  点:  99101nn
--参  数:
--返  回:
--算  法:
--建  立:  DDP  2011-09-06
------------------------------------------------------------
  v_Err          INTEGER := -20101;
  v_BreakPoint   INTEGER;
  v_Msg          VARCHAR2(255);

v_PrefixType  INTEGER;
  v_PreFix  VARCHAR2(6);
  v_SerialNumber  INTEGER;
  v_SNumber  VARCHAR2(6);
  v_ResetDate  DATE;
  v_i_ResetDate  INTEGER;
  v_YYYYMMDD  VARCHAR2(20);
  v_i_YYYYMMDD  VARCHAR2(20);
  v_DailyReset  INTEGER;
BEGIN
  v_BreakPoint := 9910110;
  v_Msg        := ' ';

v_YYYYMMDD := to_char(SYSDATE,'yyyyMMdd');
  BEGIN
    SELECT prefix,prefixtype,serialnumber,trunc(ResetDate),DailyReset
      INTO v_PreFix,v_PrefixType,v_SerialNumber,v_ResetDate,v_DailyReset
      FROM sheetidrule WHERE sheettype=I_SheetType;
          EXCEPTION WHEN NO_DATA_FOUND THEN
                  v_Msg := '单据类型['||to_char(I_SheetType)||'未设置!';
                  Raise_Application_Error(-20051,v_Msg);
  END;

IF v_DailyReset = 1 THEN
    -- 日结清零
    v_i_YYYYMMDD := to_number(to_char(SYSDATE,'yyyyMMdd'));
    v_i_ResetDate := to_number(to_char(v_ResetDate,'yyyyMMdd'));
    IF v_i_YYYYMMDD != v_i_ResetDate THEN
      UPDATE sheetidrule set ResetDate=SYSDATE,serialnumber=1 WHERE sheettype=I_SheetType;
      v_SerialNumber :=1;
    END IF;
  ELSIF v_DailyReset=2 THEN
    -- 月结清零
    v_i_YYYYMMDD := to_number(to_char(SYSDATE,'yyyyMM'));
    v_i_ResetDate := to_number(to_char(v_ResetDate,'yyyyMM'));
    IF v_i_YYYYMMDD != v_i_ResetDate THEN
      UPDATE sheetidrule SET ResetDate=SYSDATE,serialnumber=1 WHERE sheettype=I_SheetType;
      v_SerialNumber :=1;
    END IF;
  END IF;

-- 将序号格式化成6位字符串,不够的补0
  v_SNumber := lpad(to_number(v_SerialNumber),6,0);

IF v_PrefixType = 0 THEN
    IF v_PreFix IS NOT NULL THEN
      O_NewSheetID := 'JV'||I_SheetType||v_YYYYMMDD||v_SNumber;
    ELSE
      O_NewSheetID := v_YYYYMMDD||v_SNumber;
    END IF;
  ELSIF v_PrefixType = 1 THEN
    RAISE_APPLICATION_ERROR(-20001,'机构编码(店号)暂时不能使用');
  ELSIF v_PrefixType = 2 THEN
    RAISE_APPLICATION_ERROR(-20002,'BUID暂时不能使用');
  END IF;

-- 修改[流水号],递加
  UPDATE sheetidrule SET serialnumber=serialnumber+1 WHERE sheettype=I_SheetType;

EXCEPTION WHEN OTHERS THEN
        v_Msg := REPLACE(SQLERRM,'ORA' || V_Err || ': ');
        RAISE_APPLICATION_ERROR(-20001,To_Char(v_BreakPoint) || '-' || v_Msg);
END TL_GetNewSheetID;
/

PLSQL 逻辑多线程的更多相关文章

  1. PLSQL 逻辑多线程机制

    CREATE OR REPLACE PACKAGE jv_para_pkg IS PROCEDURE main(i_job_name   VARCHAR2,                 i_job ...

  2. java多线程(2)---生命周期、线程通讯

    java生命周期.线程通讯 一.生命周期 有关线程生命周期就要看下面这张图,围绕这张图讲解它的方法的含义,和不同方法间的区别.    1.yield()方法 yield()让当前正在运行的线程回到就绪 ...

  3. 浅谈利用PLSQL的多线程处理机制,加快处理大数据表的效率

    我们在处理大数据表的时候经常会感觉的处理速度不够快,效率不够高,那么今天下面我就来简单实现下PLSQL的多线程编程处理数据: 我模拟一个简单的场景,把某一张表中的数据(当然这张表的数据非常大)同步到目 ...

  4. Reactor模式详解

    转自:http://www.blogjava.net/DLevin/archive/2015/09/02/427045.html 前记 第一次听到Reactor模式是三年前的某个晚上,一个室友突然跑过 ...

  5. [改善Java代码]不使用stop方法停止线程

    线程启动完毕后,在运行可能需要终止,Java提供的终止方法只有一个stop,但是不建议使用此方法,因为它有以下三个问题: (1)stop方法是过时的 从Java编码规则来说,已经过时的方式不建议采用. ...

  6. jbpmAPI-5

    Part II. jBPM Core 5.1.概述本章介绍了API需要加载过程和执行它们.更多的细节如何定义过程本身,看看在BPMN 2.0章.与流程引擎交互(例如,开始一个过程),你需要建立一个会话 ...

  7. C++面试笔记(3)

    20. 浅拷贝与深拷贝 如何理解C++中的浅拷贝与深拷贝 深拷贝和浅拷贝 在进行对象拷贝时,当对象包含对其他资源的引用,如果需要拷贝这个独享所引用的对象,那就是深拷贝,否则就是浅拷贝 *** 21.构 ...

  8. 编写高质量代码:改善Java程序的151个建议 --[117~128]

    编写高质量代码:改善Java程序的151个建议 --[117~128] Thread 不推荐覆写start方法 先看下Thread源码: public synchronized void start( ...

  9. 转一篇:Reactor模式

    转载自:http://www.blogjava.net/DLevin/archive/2015/09/02/427045.html 前记 第一次听到Reactor模式是三年前的某个晚上,一个室友突然跑 ...

随机推荐

  1. Java—常用数据类型

    1  Vector类 Vector类似于一个数组,但与数组相比在使用上有以下两个优点. (1) 使用的时候无需声明上限,随着元素的增加,Vector的长度会自动增加. (2) Vector提供额外的方 ...

  2. apache开启.htaccess

    1 . 如何让的本地APACHE开启.htaccess 如何让的本地APACHE开启.htaccess呢?其实只要简朴修改一下apache的httpd.conf设置就让APACHE.htaccess了 ...

  3. EverEdit安装

  4. 修改placeholder提示内容的颜色以及文本框输入文字内容的颜色

    一般表单文本框提示信息:placeholder=" ",默认颜色是灰色的,输入文本信息也是默认为黑色的,如图所示: 修改placeholder提示内容的颜色关键代码及实现: 实现输 ...

  5. Windows Store App 变形特效

    在应用程序的开发过程中,为了让界面按照期望的效果显示,有时会对界面元素应用变形特效,例如图片的缩放.旋转.移动等.与3D特效不同,在界面元素实现变形特效之后,其平行关系不会发生改变,只不过是位置.大小 ...

  6. Ubuntu 下载 & 编译 Android5.1 源码

    ustc & tsinghua android srchttps://lug.ustc.edu.cn/wiki/mirrors/help/aosphttps://mirrors.tuna.ts ...

  7. 【个人使用.Net类库】(3)Excel文件操作类(基于NPOI)

    Web开发工作中经常要根据业务的需要生成对应的报表.经常采用的方法如下: 将DataTable导出至Excel文件; 读取模板Excel文件; 修改模板Excel文件对应的内容. 因此,便想到封装一个 ...

  8. 实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端

    转自:http://www.cnblogs.com/fengyun99/p/3541254.html 上一篇,介绍了二维码生成的机制,紧接着,我们就要开发手机客户端来识别这个二维码. 二维码,实际上是 ...

  9. 初学者SQL语句介绍

    初学者SQL语句介绍      1.用 Select 子句检索记录    Select 子句是每一个检索数据的查询核心.它告诉数据库引擎返回什么字段.    Select 子句的常见形式是:    S ...

  10. Hadoop随笔(一):工作流程的源码

    一.几个可能会用到的属性值 1.mapred.map.tasks.speculative.execution和mapred.reduce.tasks.speculative.execution 这两个 ...