⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trigger.sql

📁 Delphi6开发的HIS程序
💻 SQL
📖 第 1 页 / 共 3 页
字号:
declare
begin
  select ralf.pstockinorder_id.nextval into :new.pstockinorderid from dual;
end;
/

create or replace trigger pstockinorder_biu
  before insert or update on pstockinorder
  for each row
declare
  l_count            integer;
  l_pstockmedicineid integer;
  l_packamount       integer;
  l_medicineid       integer;
  l_price            number(16,
                            4);
  l_amount           number(16,
                            4);
  result integer;                           
begin
  :new.price := sp_medicinestockfindprice(:new.medicinestockid);

  if :new.isapprove = 1 and :old.isapprove = 0 then
    select medicineid
    into   l_medicineid
    from   medicinestock
    where  medicinestockid = :new.medicinestockid;

    select packamount
    into   l_packamount
    from   medicine
    where  medicineid = l_medicineid;
  
    l_amount := :new.amount * l_packamount;
    l_price  := :new.price / l_packamount;
  
    select count(*)
    into   l_count
    from   pstockmedicine
    where  medicinestockid = :new.medicinestockid and price = l_price;
  
    if l_count = 0 then
      --  增加库存条目
      insert into pstockmedicine
        (pstockmedicineid,
         samount,
         amount,
         created,
         updated,
         medicinestockid,
         price,
         total)
      values
        (null,
         0,
         l_amount,
         sysdate,
         sysdate,
         :new.medicinestockid,
         l_price,
         null);
    else
      select pstockmedicineid
      into   l_pstockmedicineid
      from   pstockmedicine
      where  medicinestockid = :new.medicinestockid and price = l_price;
    
      --  增加药房库存
      update pstockmedicine
      set    amount = amount + l_amount
      where  pstockmedicineid = l_pstockmedicineid;
    end if;
    --  减少药库库存
    result := sp_medicinestockdecrease2(:new.medicinestockid, :new.amount);
  end if;
  select sysdate into :new.updated from dual;
end;
/

create or replace trigger pstockmedicine_bi
before insert
on pstockmedicine
for each row
declare
begin
  select ralf.pstockmedicine_id.nextval into :new.pstockmedicineid from dual;
end;
/

create or replace trigger pstockmedicine_biu
before insert or update
on pstockmedicine
for each row
declare
begin
  if :new.price is null then
    :new.price := sp_medicinestockfindminsprice(:new.medicinestockid);
    if :new.price < 0 then
      raise_application_error(-20001, '库房没有库存,不能确定单价');
    end if;
  end if;
  if :new.price < 0 then
    raise_application_error(-20001, '库存不足');
  else
    :new.total := nvl(:new.price, 0) * nvl(:new.amount, 0);
  end if;
end;
/

create or replace trigger purchasemethod_bi
before insert
on purchasemethod
for each row
declare
begin
  select ralf.purchasemethod_id.nextval into :new.purchasemethodid from dual;
end;
/

create or replace trigger purchaseorder_bi
before insert
on purchaseorder
for each row
declare
begin
  select ralf.purchaseorder_id.nextval into :new.purchaseorderid from dual;
end;
/

create or replace trigger recipe_bi
before insert
on recipe
for each row
declare
begin
  select ralf.recipe_id.nextval into :new.recipeid from dual;
  select ralf.reckoning_id.nextval into :new.reckoningid from dual;
  insert into reckoning(reckoningid, created, updated, charge, isactive, isvalid, sickid)
  values(:new.reckoningid, sysdate, sysdate, 0, 1, 1, :new.sickid);
end;
/

create or replace trigger recipe_bu
before update
on recipe
for each row
declare
begin
  if :new.isvalid = 1 and :old.isvalid = 0 then
     update reckoning set isvalid = 1 where reckoningid = :new.reckoningid;
     sp_rmedicinesetactive(:new.reckoningid);
  end if;
end;
/

create or replace trigger reckoning_bi
before insert
on reckoning
for each row
declare
begin
  if :new.reckoningid is null then
    select ralf.reckoning_id.nextval into :new.reckoningid from dual;
  end if;
end;
/

create or replace trigger rmaterial_bi
before insert
on rmaterial
for each row
declare
begin
  select ralf.rmaterial_id.nextval into :new.rmaterialid from dual;
end;
/

create or replace trigger rmedicine_bi
before insert
on rmedicine
for each row
declare
begin
  select ralf.rmedicine_id.nextval into :new.rmedicineid from dual;
end;
/

create or replace trigger rmedicine_biu
before insert or update
on rmedicine
for each row
declare
  l_medicinestockid integer;
  l_pstockoutorderid integer;
begin
  :new.price := sp_medicinestockfindminsprice2(:new.pstockmedicineid);
  :new.total := :new.amount * :new.price;
  
  select medicinestockid into l_medicinestockid from pstockmedicine 
  where pstockmedicineid = :new.pstockmedicineid;

  select medicineid into :new.medicineid from medicinestock where medicinestockid = l_medicinestockid;

  if updating and :new.isactive = 0 and :old.isactive = 1 then
    select pstockoutorder_id.nextval into l_pstockoutorderid from dual;
    insert into pstockoutorder
    (
      pstockoutorderid,
      total,
      taxrate,
      amount,
      isactive,
      isvalid,
      isapprove,
      approvedate,
      created,
      updated,
      checkoutdate,
      pstockmedicineid,
      createby,
      updateby,
      approveby,
      price,
      departmentid
    )
    values
    (
      l_pstockoutorderid,
      0,
      null,
      :new.amount,
      0,
      0,
      0,
      null,
      sysdate,
      sysdate,
      sysdate,
      :new.pstockmedicineid,
      null,
      null,
      null,
      :new.price,
      null
    );
    update pstockoutorder set isapprove = 1, approvedate = sysdate where pstockoutorderid = l_pstockoutorderid;
  end if;
end;
/

create or replace trigger roperation_bi
before insert
on roperation
for each row
declare
begin
  select ralf.roperation_id.nextval into :new.roperationid from dual;
end;
/

create or replace trigger rservice_bi
before insert
on rservice
for each row
declare
begin
  select ralf.rservice_id.nextval into :new.rserviceid from dual;
end;
/

create or replace trigger rservice_biu
before insert or update
on rservice
for each row
declare
begin
  if :new.price is null then
    :new.price := sp_servicefindprice(:new.serviceid);
  end if;
  :new.total := :new.amount * :new.price;
end;
/

create or replace trigger scomaterial_bi
before insert
on scomaterial
for each row
declare
begin
  select ralf.scomaterial_id.nextval into :new.scomaterialid from dual;
end;
/

create or replace trigger scomedicine_bi
before insert
on scomedicine
for each row
declare
begin
  select ralf.scomedicine_id.nextval into :new.scomedicineid from dual;
end;
/

create or replace trigger scomedicine_bu
before insert or update
on scomedicine
for each row
declare
begin
  if :new.isapprove = 1 and :old.isapprove = 0 then
    update medicinestockdetail set amount = amount + :new.cquantity 
    where medicinestockdetailid = :new.medicinestockdetailid and amount = :new.oamount;
  end if;
end;
/

create or replace trigger sectionoffice_bi
before insert
on sectionoffice
for each row
declare
begin
  select ralf.sectionoffice_id.nextval into :new.sectionofficeid from dual;
end;
/

create or replace trigger sick_bi
before insert
on sick
for each row
declare
  l_code      varchar(32);
  l_i_code    integer;
  l_recipe_id integer;
begin
  select paramvalue
  into   l_code
  from   param
  where  paramname = 'beginsickcode';
  l_i_code := to_number(l_code) + 1;
  update param
  set    paramvalue = trim(to_char(l_i_code, '000000'))
  where  paramname = 'beginsickcode';
  :new.code := trim(to_char(sysdate, 'yy')) ||
               trim(to_char(l_i_code, '000000'));
  select sick_id.nextval into :new.sickid from dual;
end;
/

create or replace trigger sicknesslevel_bi
before insert
on sicknesslevel
for each row
declare
begin
  select ralf.sicknesslevel_id.nextval into :new.sicknesslevelid from dual;
end;
/

create or replace trigger sicknessstate_bi
before insert
on sicknessstate
for each row
declare
begin
  select ralf.sicknessstate_id.nextval into :new.sicknessstateid from dual;
end;
/

create or replace trigger sickroom_bi
before insert
on sickroom
for each row
declare
begin
  select ralf.sickroom_id.nextval into :new.sickroomid from dual;
end;
/

create or replace trigger sicktype_bi
before insert
on sicktype
for each row
declare
begin
  select ralf.sicktype_id.nextval into :new.sicktypeid from dual;
end;
/

create or replace trigger siomaterialdetail_bi
before insert
on siomaterialdetail
for each row
declare
begin
  select ralf.siomaterialdetail_id.nextval into :new.siomaterialdetailid from dual;
end;
/

create or replace trigger siomaterialdetail_biu
before insert or update
on siomaterialdetail
for each row
declare
begin
  :new.total := :new.amount * :new.price;
end;
/

create or replace trigger siomedicinedetail_bi
before insert
on siomedicinedetail
for each row
declare
begin
  select ralf.siomedicinedetail_id.nextval into :new.siomedicinedetailid from dual;
end;
/

create or replace trigger siomedicinedetail_biu
before insert or update
on siomedicinedetail
for each row
declare
begin
  if :new.pomedicinedetailid is not null then
    select medicineid
    into   :new.medicineid
    from   pomedicinedetail
    where  pomedicinedetailid = :new.pomedicinedetailid;
  end if;

  :new.total := :new.amount * :new.price;

  if inserting then
    update stockinorder
    set    total = total + :new.amount * :new.price
    where  stockinorderid = :new.stockinorderid;
  end if;
  if updating then
    update stockinorder
    set    total = total - :old.amount * :old.price +
                   :new.amount * :new.price
    where  stockinorderid = :new.stockinorderid;
  end if;
end;
/

create or replace trigger siomedicinedetail_bd
  before delete on siomedicinedetail
  for each row
declare
begin
  update stockinorder
  set    total = total - :old.amount * :old.price
  where  stockinorderid = :new.stockinorderid;
end;
/

create or replace trigger soomaterialdetail_bi
before insert
on soomaterialdetail
for each row
declare
begin
  select ralf.soomaterialdetail_id.nextval into :new.soomaterialdetailid from dual;
end;
/

create or replace trigger soomaterialdetail_biu
before insert or update
on soomaterialdetail
for each row
declare
begin
  :new.total := :new.amount * :new.price;
end;
/

create or replace trigger soomedicinedetail_bi
before insert
on soomedicinedetail
for each row
declare
begin
  select ralf.soomedicinedetail_id.nextval into :new.soomedicinedetailid from dual;
end;
/

create or replace trigger soomedicinedetail_biu
  before insert or update on soomedicinedetail
  for each row
declare
begin
  if :new.amount > sp_medicinestockfindamount(:new.medicinestockid) then
    raise_application_error(-20001,
                            '出库数量不能大于当前批次数量');
  end if;

  :new.price := sp_medicinestockfindprice(:new.medicinestockid);
  :new.total := :new.amount * :new.price;
 
  update stockoutorder
  set    total = total - nvl(:old.amount,
                             0) * nvl(:old.price,
                                              0) + :new.amount * :new.price
  where  stockoutorderid = :new.stockoutorderid;

  select medicineid

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -