单据存储过程

本文介绍了一个用于商品转类单据审核与执行的PL/SQL存储过程。该过程首先验证单据的存在性和类型一致性,然后根据单据类型进行不同的处理。对于特定类型的单据,如果其生效日期小于或等于当前日期,则会立即执行商品转类操作;否则,将该单据加入待执行清单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

create or replace procedure SP_BM_SPUHEADCATEGORY

(
i_BILLNO      IN VARCHAR2,
i_BillType      In VARCHAR2
) AS
-------------------------------------------------------------------
--SP_BM_SPUHeadMain        BM_SPUHead单据审核过程入口
--说明:
--参数:
--返回:
--表  :
--描述:
--注意:
--建立:张宪强  2013.07.25
-------------------------------------------------------------------
  v_Err        INTEGER := -20001;
  v_BreakPoint    INTEGER;
  v_Msg        VARCHAR2(1000);

  r0          BM_SPUHead%rowtype;

BEGIN
  v_BreakPoint := 10;
  v_Msg        := ' ';

--1. 单据检查
  v_BreakPoint := 110;
  BEGIN
    Select * into r0 from BM_SPUHead where BILLNO=i_BILLNO;
    EXCEPTION WHEN NO_DATA_FOUND THEN
      v_Msg := '单据['||i_BILLNO||'] 不存在!';
      Raise_Application_Error(-20001,'(SP_BM_SPUHEADCATEGORY):'||To_Char(v_BreakPoint)||'-'||v_Msg);
  END;

  v_BreakPoint := 120;
  IF r0.BillType <> to_number(i_Billtype) THEN
    v_Msg := '单据类型['||i_BillType||'] 参数与单据表数据不一致!';
    Raise_Application_Error(-20001,'(SP_BM_SPUHEADCATEGORY):'||To_Char(v_BreakPoint)||'-'||v_Msg);
  END IF;

  v_BreakPoint := 130;
  IF r0.effecttime IS NULL THEN
    Update BM_SPUHead set effecttime=trunc(SYSDATE) where BILLNO=i_BILLNO;
    r0.effecttime := trunc(SYSDATE);
  END IF;

--2. 单据执行
  IF r0.BillType = 1212 THEN
 
    --如果生效日期早于等于当前日期,则单据立即生效
    v_BreakPoint := 210;
    IF r0.effecttime <= trunc(SYSDATE) THEN
      v_BreakPoint := 220;
      SP_BM_SPUCATEGORYRUN(i_BILLNO);
    ELSE
      v_BreakPoint := 230;
      --ExecuteFlag:执行标志(0=待执行 1=已执行)
      INSERT INTO DayOverBillList0
        (SeqNo,BILLNO,BILLTYPE,StartDate,EndDate,ExecuteFlag)
      VALUES
        (SEQ_SEQNo.Nextval,r0.billno,r0.billtype,TRUNC(r0.StartDate),TRUNC(r0.EndDate),0);
    END IF;
  ELSE
    v_Msg := '单据类型['||i_BillType||'] 未定义!';
    Raise_Application_Error(-20001,'(SP_BM_SPUHEADCATEGORY):'||To_Char(v_BreakPoint)||'-'||v_Msg);
  END IF;


  RETURN;
EXCEPTION WHEN OTHERS THEN
  ROLLBACK;
  v_Msg := REPLACE(SQLERRM,'ORA' || V_Err || ': ');
    Raise_Application_Error(-20001,'(SP_BM_SPUHEADCATEGORY):'||To_Char(v_BreakPoint)||'-'||v_Msg);
  
end SP_BM_SPUHEADCATEGORY;

 

create or replace procedure SP_BM_SPUCATEGORYRun(
i_BILLNO            IN VARCHAR2

) AS
-------------------------------------------------------------------
--SP_BM_SPUCATEGORYRun      商品转类单 更新主档
--说明:
--参数:
--返回:
--表  :
--描述:
--注意:
--建立:张宪强 2013-07-25
-------------------------------------------------------------------
  v_Err        INTEGER := -20001;
  v_BreakPoint    INTEGER;
  v_Msg        VARCHAR2(1000);

  r0          BM_SPUHead%rowtype;

  
BEGIN

  v_BreakPoint := 10;
  v_Msg        := ' ';

  v_BreakPoint := 110;
  BEGIN
    Select * into r0 from BM_SPUHead where BILLNO=i_BILLNO;
    EXCEPTION WHEN NO_DATA_FOUND THEN
      v_Msg := '商品转类单['||i_BILLNO||'] 不存在!';
      Raise_Application_Error(-20001,'(SP_BM_SPUCATEGORYRun):'||To_Char(v_BreakPoint)||'-'||v_Msg);
  END;

    v_BreakPoint := 210;
  FOR r1 IN
  (
    SELECT * FROM Bm_Spudetail WHERE BILLNO=i_BILLNO
  )
  LOOP
    --(1) 更新SPU表  r1   spudetailList 
    v_BreakPoint := 230;

           
    -- Update SPU t Set t.categoryid =r1.Categoryid2, t.categorycode = r1.categorycode2,
             -- t.resourceid = r0.categorygroup2,
             --( select t5.resourceid from res t5 where t5.resourceid = r0.categorygroup2),
            --  t.resourcecode =  (select t6.resourcecode from res t6 where t6.resourceid = r0.categorygroup2)
              
      Update SPU t Set t.categoryid =r1.Categoryid2, t.categorycode = r1.categorycode2,
                  t.resourceid = r0.categorygroup2,
                  --(   select t1.resourceid 
                  --             from  res t1 ,resitem t2,categoryv5 t3 
                  --              where t.resourceid=t1.resourceid and t2.resourceid=t1.resourceid
                  --               and t2.itemid=t3.categoryID5 and t3.categoryID5= r1.categoryid2),
                                        
                t.resourcecode = ( select t.resourcecode from res t where t.resourceid =r0.categorygroup2 )
                -- (   select t1.resourcecode 
                --               from  res t1 ,resitem t2,categoryv5 t3 
                --                where t.resourceid=t1.resourceid and t2.resourceid=t1.resourceid
                --                 and t2.itemid=t3.categoryID5 and t3.categoryID5= r1.categoryid2  )
      WHERE t.spuid = r1.Spuid ;
      
     

    --(2) 更新CATEGORY表  商品实际数量
     v_BreakPoint := 245;
     
     Update CATEGORY t Set t.spucount = t.spucount +1
         WHERE t.categoryid = ( select t5.categoryID4 from categoryv5 t5 where t5.categoryid5 = r1.Categoryid2) ;
         
     Update CATEGORY t Set t.spucount = t.spucount -1
         WHERE t.categoryid = ( select t5.categoryID4 from categoryv5 t5 where t5.categoryid5 = r1.categoryid) ;
  END LOOP;


    RETURN;
EXCEPTION WHEN OTHERS THEN
    ROLLBACK;
    v_Msg := REPLACE(SQLERRM,'ORA' || V_Err || ': ');
    Raise_Application_Error(-20001,'(SP_BM_SPUCATEGORYRun):'||To_Char(v_BreakPoint)||'-'||v_Msg);

end SP_BM_SPUCATEGORYRun;

 

 

 

转载于:https://www.cnblogs.com/xqzblog/p/3222456.html

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值