• PLSQL 逻辑多线程


      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;
    /

  • 相关阅读:
    SEO值得学习建议
    ClientValidationFunction
    readystate的五种状态
    XMLHTTP对象参考
    Provider详解
    有缺点,向左走向右走
    DotNetBar 6.6.0.4 for Vs2005 (+特殊补丁)
    [无敌]一些web开发中常用的、做成cs文件的js代码 转帖来的
    AjaxPro.NET框架生成高效率的Tree(Asp.net 2.0)(示例代码下载)
    Vista 下使用Visual Studio 2005 开发Oracle 方面程序出现的数据连结问题及解决方案
  • 原文地址:https://www.cnblogs.com/eastsea/p/5279144.html
Copyright © 2020-2023  润新知