半城风月半城雪 2018-04-04 06:31 采纳率: 50%
浏览 666
已采纳

oracle 触发器,拆单,求问

 CREATE OR REPLACE TRIGGER SPLITSINGLETRIGGER
  BEFORE INSERT ON CT_CUS_GDSHOPGUIDBILLENTRY
  FOR EACH ROW
DECLARE
  V_NEWID VARCHAR2(50);
  V_NUMBER VARCHAR2(50);
BEGIN
  SELECT FID
    INTO V_NEWID
    FROM CREFID
   WHERE FSTATE = 1
     AND ROWNUM = 1;
      SELECT ABS(MOD(DBMS_RANDOM.RANDOM,50)) INTO V_NUMBER FROM DUAL;
  IF :NEW.FSEQ >= 2 THEN
    --当选择的商品数大于等于2 ,给表头插入新的一条数据
    INSERT INTO CT_CUS_GDSHOPGUIDBILL
      SELECT FCREATORID,
             FCREATETIME,
             FLASTUPDATEUSERID,
             FLASTUPDATETIME,
             FCONTROLUNITID,
             FNUMBER || TO_CHAR(V_NUMBER), --修改FNUMBER
             FBIZDATE,
             FHANDLERID,
             FDESCRIPTION,
             FHASEFFECTED,
             FAUDITORID,
             FSOURCEBILLID,
             FSOURCEFUNCTION,
             V_NEWID, --修改FID
             FFIVOUCHERED,
             CFFICOMPANYID,
             CFGUIDERNAMEID,
             CFGUIDERNAMESHOW,
             CFGUIDERID,
             CFBILLTYPE,
             CFBILLSTATE,
             CFSGBILLSTATES,
             CFGDSHOPGUIDERNUM,
             CFORGANIZATIONUNIT,
             CFAUDITDATE,
             CFDELIVERYORDER,
             CFCONFIRM,
             CFTOREVIEWDATE,
             CFCONFIRMDATE,
             CFTOREVIEW,
             FENTITYCUSTOMER,
             FENTITYCUSTOMERADDRESS,
             FENTITYCUSTOMERTEL,
             CFBUSFEEDBACK,
             CFFINFEEDBACK,
             CFYANZHENGMA,
             CFOSMDANHAO
        FROM CT_CUS_GDSHOPGUIDBILL
       WHERE FID = :NEW.FPARENTID;
    :NEW.FPARENTID := V_NEWID;
    :NEW.FSEQ      := 1;
    UPDATE CREFID SET FSTATE = 2 WHERE FID = V_NEWID;--修改state
  END IF;
END;

触发器现在是生成随机数,不过还是FNUMBER有可能会重复
提交商品不止一个的话本来是想给fnumber加上一个有顺序的数字
比如拆两条,有一条fnumber+2
拆三条,一条+2,一条+3
但是传过来的fseq(本来是序号)可能由于先拆两单,再拆导致序号不固定,
出现重复的fnumber,有什么办法,让fnumber可以按顺序来,

  • 写回答

3条回答

  • DukeYong 2018-04-05 02:05
    关注

    如果不想他重复且自动累加,可以借助oracle 的序列sequence,定义个序列,每次获取nextval

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)