简单的触发器

来源:互联网 发布:mac版软件后缀 编辑:程序博客网 时间:2024/04/30 07:14
create or replace trigger into_demandPlan_trigger
  after insert on I_WZ2SC_SHJHZWJ
  for each row
declare
  v_materielName   SCM_WZ_DemandPlan.Materielname%TYPE;
  v_plan_uuid      SCM_WZ_DemandPlan.Id%TYPE; --唯一编号
  v_sysdate        SCM_WZ_DemandPlan.Createddate%TYPE; --当前数据库时间
  v_plan_unitId    SCM_WZ_DemandPlan.Unitid%TYPE; --UnitId,按接收计量单位转换
逻辑转换 (采购单位流水)
  v_plan_storageId SCM_WZ_DemandPlan.storageId%TYPE; --ToStockId,以DHCK作为当
前公司下的业务组织获取业务组织Id作为到货仓库(到货仓库号)
begin
  v_materielName := materielName_function('SHTB', :new.CLBH);
  select sys_guid() into v_plan_uuid from dual; --自动产生Id
  select sysdate into v_sysdate from dual; --获取当前数据库时间
  v_plan_unitId    := unit_function(to_char(:new.CGDWLS),
                                    'SCM_WZ_UOM',
                                    'SHTB'); --UnitId,按接收计量单位转换逻辑
转换(采购单位流水number,packageCode,orgCode)
  v_plan_storageId := storage_function('SHTB', to_char(:new.DHCKH)); --
orgCode,bizOrgCode
  insert into SCM_WZ_DemandPlan
    (
     --唯一编号,公司,业务组织,数据状态,数据版本,
     id,
     orgCode,
     bizOrgCode,
     status,
     dataVersion,
     --创建公司,创建人(编制人员),建立时间DATE(编制时间),修改人(UPDATE_BY),修改
时间DATE(更新时间)
     createdOrgCode,
     creatorCode,
     createdDate,
     redactorCode,
     redateDate,
     --直送计划编号,供应商编号,预计送货日期,材料编号,托板数
     dDeliveryCode,
     vendorCode,
     deliverPlanDate,
     materielCode,
     palletQty,
     --数量,采购单位流水(UomDetailEntity unitId),平均量,到货区域,到货仓库号,
     deliverQty,
     Unitid,
     average,
     toStockArea,
     storageId,
     --收料单号,收料单从表流水,计划状态,MQ操作日期,MQ状态
     aSNCode,
     aSNDetailId,
     planStatus,
     mQRecordDate,
     mQStatus,
     --MQ数量,MQ流水号,接收状态,接收数量,执行单位
     mQCount,
     mQId,
     deliverStatus,
     deliverQuantity,
     impCompany,
     --材料名称
     materielName)
  values
    (
     --唯一编号,公司,业务组织,数据状态,数据版本,
     v_plan_uuid,
     'SHTB',
     null,
     '20',
     1,
     ----创建公司,创建人(编制人员),建立时间(编制时间 CHAR(14)),修改人
(UPDATE_BY),修改时间(更新时间 DATE)
     'SHTB',
     :new.BZRY,
     to_date(:new.BZSJ, 'YYYY/MM/DD'),
     :new.UPDATE_BY,
     :new.UPDATE_DATE,
     --直送计划编号,供应商编号,预计送货日期(CHAR(8)),材料编号,托板数
     :new.ZSJHBH,
     :new.GYSBH,
     to_date(:new.YJSHRQ, 'YYYY/MM/DD'),
     :new.CLBH,
     :new.TBS,
     --数量,采购单位流水(NUMBER(12)),平均量,到货区域String(NUMBER(12)),到货仓
库号,
     :new.SL,
     v_plan_unitId,
     :new.PJL,
     to_char(:new.DHQY),
     v_plan_storageId,
     --收料单号,收料单从表流水String(NUMBER(12)),计划状态(状态),MQ操作日期
(CHAR(4)没法转),MQ状态
     :new.SLDH,
     to_char(:new.SLCBLS),
     :new.ZT,
     to_date(:new.MQ_OP, 'YYYY'),
     :new.MQ_ST,
     --MQ数量String(NUMBER(12)),MQ流水号String(NUMBER(22)),接收状态,接收数量
String(NUMBER(12,5)),执行单位
     to_char(:new.MQ_COUNT),
     to_char(:new.MQ_LSH),
     :new.DELIVER_STATUS,
     to_char(:new.DELIVER_QUANTITY),
     :new.ZXDW,
     --材料名称
     v_materielName);
end;
这是用oracle10g中创建的触发器,大致就是在I_WZ2SC_SHJHZWJ表执行插入操作后,为
SCM_WZ_DemandPlan这个表中新增一条数据;这应该是简单的 触发器。
建立触发器的一般操作是用
create or replace trigger 触发器名
after insert on 表名//相应表上的操作
for each row 
declare //声明变量
 v_materielName   SCM_WZ_DemandPlan.Materielname%TYPE;//用%TYPE绑定表中的字段
,指定了变量具有与SCM_WZ_DemandPlan.Materielname中一样的字段类型。
begin
//所要进行的操作
end;
下面是sql server中的触发器
alter trigger trig_transinfo_insert 
on transinfo 
for insert,update 
as 
print '开始执行触发器------------------------------' 
print '临时表的内容::----------' 
select * from inserted 
print '-------------------' 
declare @type varchar(20) 
declare @transmoney money 
declare @cardid varchar(20) 
set @type=(select transtype from inserted ) 
set @transmoney=(select transmoney from inserted ) 
set @cardid=(select cardid from inserted ) 
print @type +'   <a href="mailto:" +@cardid"="" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: rgb(1, 95, 145); text-decoration: none; ">'+@cardid 
if(@type='存入') 
begin 
update bank set currentmoney= 
currentmoney+@transmoney where cardid=@cardid 
select * from bank 
end 
else 
begin 
update bank set currentmoney= 
currentmoney-@transmoney where cardid=@cardid 
select * from bank 
end
update transinfo set transmoney=500 
where cardid='8505 001' and transtype='支取' 
print '触发器执行完毕' 
go 
从上可以看出两者的差别;对于变量的赋值有点区别之外,其他的语句基本上一致;
原创粉丝点击