半城风月半城雪 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 关于#ar#的问题:/* User can add his own implementation to report the HAL error return state */(语言-c语言)
  • ¥15 ImportError: DLL load failed while importing _iterative: 找不到指定的模块。
  • ¥15 如何通过交互分析得出某高危患者对放疗获益更多
  • ¥15 相关性分析中,p<0.05, r=0.29,怎么评价相关性呢
  • ¥15 docker部署Mongodb后输入命令报错?
  • ¥15 将下列流程图转变成python程序代码
  • ¥15 我需要全国每个城市的最新小区名字等数据。
  • ¥15 开发一个小区生态的小程序
  • ¥15 如何解决Excel中dependent dropdown list 的问题
  • ¥15 MddBootstrapInitialize2失败