。。有这样一个需求:
   两个表,表A 是信息表,表B 是历史表,表B中除了表A中的字段,还多一个"类型"字段;
   我要将表A中的数据,更新到表B中,同时表B中的"类型"字段中自动填充由A.a字段对应的一个类型;
不知道表述清楚了没有,路过的大神帮我看看 能不能用触发器 来实现~ 
(百度发现 触发器的种类很多,语法也多,而且基本上好像都是校验能否insert/update/delete的数据格式的,不知道能不能实现我想要的功能,求大神解惑,灰常感谢。。)

解决方案 »

  1.   

    我要将表A中的数据,更新到表B中,同时表B中的"类型"字段中自动填充由A.a字段对应的一个类型;
    A 中一个字段,要填充到表 B 的两个字段 ?
      

  2.   


    数据源 表
    --------------------------------------------------------
    --  DDL for Table DX_SEND_HISTORY
    --------------------------------------------------------  CREATE TABLE "ZFXX"."DX_SEND_HISTORY" 
       ( "ID" VARCHAR2(30 BYTE), 
    "SMSID" VARCHAR2(30 BYTE), 
    "MOBILE" VARCHAR2(12 BYTE), 
    "SERVICENUM" VARCHAR2(8 BYTE), 
    "SMS" VARCHAR2(400 BYTE), 
    "REPORT" VARCHAR2(1 BYTE), 
    "PRIORITY" VARCHAR2(1 BYTE), 
    "BUSIID" VARCHAR2(50 BYTE), 
    "SYSTEMID" VARCHAR2(3 BYTE), 
    "TYPE" VARCHAR2(2 BYTE), 
    "CHANNELID" VARCHAR2(10 BYTE), 
    "OPERATORS" VARCHAR2(10 BYTE), 
    "SUBSYSID" VARCHAR2(5 BYTE), 
    "SENDCOUNT" NUMBER(*,0), 
    "PROCNAME" VARCHAR2(30 BYTE), 
    "WRITETIME" DATE, 
    "DELAYEDTIME" DATE, 
    "SENDTIME" DATE, 
    "SUCCESSFLAG" VARCHAR2(8 BYTE), 
    "MSGID" VARCHAR2(30 BYTE), 
    "RECVTIME" DATE, 
    "REPORTSTAT" VARCHAR2(2 BYTE), 
    "REPORTINFO" VARCHAR2(200 BYTE), 
    "STEPNOW" VARCHAR2(1 BYTE), 
    "MONTHDAY" VARCHAR2(2 BYTE), 
    "OPTUSERNAME" VARCHAR2(20 BYTE), 
    "SHOWFLAG" VARCHAR2(10 BYTE)
       ) SEGMENT CREATION IMMEDIATE 
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
     NOCOMPRESS LOGGING
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "USERS" ;
    REM INSERTING into ZFXX.DX_SEND_HISTORY
    SET DEFINE OFF;
    Insert into ZFXX.DX_SEND_HISTORY (ID,SMSID,MOBILE,SERVICENUM,SMS,REPORT,PRIORITY,BUSIID,SYSTEMID,TYPE,CHANNELID,OPERATORS,SUBSYSID,SENDCOUNT,PROCNAME,WRITETIME,DELAYEDTIME,SENDTIME,SUCCESSFLAG,MSGID,RECVTIME,REPORTSTAT,REPORTINFO,STEPNOW,MONTHDAY,OPTUSERNAME,SHOWFLAG) values ('20161201141451000000195','1234','18844067333',null,'1111',null,'1','D00001','123',null,null,'1',null,null,null,null,null,null,null,null,null,'2',null,null,null,null,null);
    Insert into ZFXX.DX_SEND_HISTORY (ID,SMSID,MOBILE,SERVICENUM,SMS,REPORT,PRIORITY,BUSIID,SYSTEMID,TYPE,CHANNELID,OPERATORS,SUBSYSID,SENDCOUNT,PROCNAME,WRITETIME,DELAYEDTIME,SENDTIME,SUCCESSFLAG,MSGID,RECVTIME,REPORTSTAT,REPORTINFO,STEPNOW,MONTHDAY,OPTUSERNAME,SHOWFLAG) values ('20161201141451000000196','2345','18844067333',null,'2222',null,'2','D00002','123',null,null,'1',null,null,null,null,null,null,null,null,null,'3',null,null,null,null,null);
    Insert into ZFXX.DX_SEND_HISTORY (ID,SMSID,MOBILE,SERVICENUM,SMS,REPORT,PRIORITY,BUSIID,SYSTEMID,TYPE,CHANNELID,OPERATORS,SUBSYSID,SENDCOUNT,PROCNAME,WRITETIME,DELAYEDTIME,SENDTIME,SUCCESSFLAG,MSGID,RECVTIME,REPORTSTAT,REPORTINFO,STEPNOW,MONTHDAY,OPTUSERNAME,SHOWFLAG) values ('20161201141451000000197','3456','18844067333',null,'3333',null,'3','D00003','123',null,null,'1',null,null,null,null,null,null,null,null,null,'3',null,null,null,null,null);
      

  3.   

    要更新数据的   目标 表
    --------------------------------------------------------
    --  DDL for Table TJ_SEND_HISTORY
    --------------------------------------------------------  CREATE TABLE "ZFXX"."TJ_SEND_HISTORY" 
       ( "MX_ID" VARCHAR2(20 BYTE), 
    "REQUEST_ID" VARCHAR2(30 BYTE), 
    "DX_ID" VARCHAR2(30 BYTE), 
    "SMSID" VARCHAR2(30 BYTE), 
    "MOBILE" VARCHAR2(12 BYTE), 
    "SERVICENUM" VARCHAR2(8 BYTE), 
    "SMS" VARCHAR2(400 BYTE), 
    "REPORT" VARCHAR2(1 BYTE), 
    "PRIORITY" VARCHAR2(1 BYTE), 
    "BUSIID" VARCHAR2(50 BYTE), 
    "SYSTEMID" VARCHAR2(3 BYTE), 
    "TYPE" VARCHAR2(2 BYTE), 
    "CHANNELID" VARCHAR2(10 BYTE), 
    "OPERATORS" VARCHAR2(10 BYTE), 
    "SUBSYSID" VARCHAR2(5 BYTE), 
    "SENDCOUNT" NUMBER(*,0), 
    "PROCNAME" VARCHAR2(30 BYTE), 
    "WRITETIME" DATE, 
    "DELAYEDTIME" DATE, 
    "SENDTIME" DATE, 
    "SUCCESSFLAG" VARCHAR2(8 BYTE), 
    "MSGID" VARCHAR2(30 BYTE), 
    "RECVTIME" DATE, 
    "REPORTSTAT" VARCHAR2(2 BYTE), 
    "REPORTINFO" VARCHAR2(200 BYTE), 
    "STEPNOW" VARCHAR2(1 BYTE), 
    "MONTHDAY" VARCHAR2(2 BYTE), 
    "OPTUSERNAME" VARCHAR2(20 BYTE), 
    "SHOWFLAG" VARCHAR2(10 BYTE), 
    "YWLX" VARCHAR2(30 BYTE)
       ) SEGMENT CREATION IMMEDIATE 
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
     NOCOMPRESS LOGGING
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "USERS" ;
      

  4.   

    需要你提供数据和关键的字段,不用所有字段都贴上来。
    比如a表中有怎样的序号,对应什么样的分组类别。
    这个对应分组存在哪里,a表中,还是第三个表。
    如果在A表中,直接引用即可。 
    如果在第三个表中,需要关联查询得到
      

  5.   


    A 中一个字段,要填充到表 B 的两个对应字段 ?
    ============我只想说我是想 上传第三张表的  但是 论坛不让连续回复四次 =====
    最多连续回复三次 很尴尬~ 最后一张表就放这里了。。
    弄的有点乱  大神们随性看~
    =========== 中间表  busiid  和  ywlx 的对应关系表
    --------------------------------------------------------
    --  DDL for Table YWLX_MAP
    --------------------------------------------------------  CREATE TABLE "ZFXX"."YWLX_MAP" 
       ( "REQUEST_ID" VARCHAR2(30 BYTE), 
    "BUSIID" VARCHAR2(50 BYTE), 
    "YWLX" VARCHAR2(30 BYTE), 
    "YWMS" VARCHAR2(30 BYTE)
       ) SEGMENT CREATION IMMEDIATE 
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
     NOCOMPRESS LOGGING
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "USERS" ;
    REM INSERTING into ZFXX.YWLX_MAP
    SET DEFINE OFF;
    Insert into ZFXX.YWLX_MAP (REQUEST_ID,BUSIID,YWLX,YWMS) values ('1','D00001','0','小');
    Insert into ZFXX.YWLX_MAP (REQUEST_ID,BUSIID,YWLX,YWMS) values ('2','D00002','2','中');
    Insert into ZFXX.YWLX_MAP (REQUEST_ID,BUSIID,YWLX,YWMS) values ('3','D00003','1','大');