故事是这样的,这边有个项目是我们的项目经理写的项目,但是有些功能还是需要外包去做,然后外包做好了,却对项目经理的数据库不了解,然后就想了下,让我去做触发器来适配他们,让外包插入数据到他们的表的时候触发事件到我项目经理的表里去,这里的触发是如果项目经理的表有数据,就修改数据,如果没有就插入数据,效果类似merge,也不晓得究竟能用不.唉不管了,简单的写了一下 。

关键还是if else的写法,开始的时候写,老报错,苦恼了一段时间,我就纳闷,我写个触发器连if else都不会,以后还搞什么,然后各种百度,无奈还是没解决,就拼运气上群里问问,结果还真解决了…

oracle 的if else 嵌套语法

先建一个变量,注意,是在declare 和 begin 之间写

declare

result number;

begin

if 1>2 then

result = 2;

else

result = 2;

end if;

end;

----------------结果编译出错了…请看下面,编译是正确的!!-------------------------------------------------------------

declare

result number;

begin

if 1>2 then

result := 2;

else

result := 2;

end if;

end;

–发现了什么?对,在等号前加了个冒号,就行了。解释是 直接等于是比较关系 :=才是赋值…

在 if 判断语句 then 的后面加一个 begin 关键字 ,语句中就可以写多行语句了!但是要在语句后面加一个end;

例:

declare

result number;

begin

if 1>2 then begin

select ....

insert ...

update...

end;

else begin

delete....

insert...

select...

end;

end if;

end;

//下面是项目实战的触发器

declare

HISID varchar(64);

DRUGID number(6);

DRUGNAME VARCHAR(32);

dataCount number;

dataCount2 number;

tankNo number;--柜号

tankNoString varchar2(255);

begin

tankNo:= ((to_number(:new.mccode)-1)*195+(:new.mccol-1)*13+:new.mcrow);

SELECT r.DRUGID2 into HISID FROM DRUGNAME r where r.DRUGNAME = :new.GRANULENAME ;

SELECT r.DRUGID into DRUGID FROM DRUGNAME r where r.DRUGNAME = :new.GRANULENAME ;

-- SELECT count(*) into dataCount from Drawer r where r.WCLASS =:new.MCCODE AND r.WROW =:new.MCROW AND r.WCOL = :new.MCCOL;

SELECT count(*) into dataCount from Drawer r where r.WCLASS =:new.MCCODE AND r.DRAWERID= tankNo;

if dataCount>0 then begin

update drawer dr set

dr.drugid = DRUGID,

dr.DRID=:new.granulecode,

dr.drugid2=HISID

where dr.DRAWERID = tankNo AND dr.WROW =:new.MCROW and dr.WCOL = :new.MCCOL ;

end;

else begin --

if tankNo <10 then begin

tankNoString:='S00'||tankNo;

INSERT INTO DRAWER(DRAWERID,WCLASS,WCOL,WROW,DRUGID,DRID,DRUGID2)

VALUES(tankNo,:new.mccode,:new.mccol,:new.mcrow,DRUGID,tankNoString,HISID);

end;

end if;

if (tankNo <100 and tankNo >10 ) then begin

tankNoString:='S0'||tankNo;

INSERT INTO DRAWER(DRAWERID,WCLASS,WCOL,WROW,DRUGID,DRID,DRUGID2)

VALUES(tankNo,:new.mccode,:new.mccol,:new.mcrow,DRUGID,tankNoString,HISID);

end;

end if;

if (tankNo <1000 and tankNo >100 ) then begin

tankNoString:='S'||tankNo;

INSERT INTO DRAWER(DRAWERID,WCLASS,WCOL,WROW,DRUGID,DRID,DRUGID2)

VALUES(tankNo,:new.mccode,:new.mccol,:new.mcrow,DRUGID,tankNoString,HISID);

end;

end if;

end;

end if;

end;

如果你认真看了,你就会发现,下面我有3个if判断语句都没有用 else if,不是我不用,是用了会报错,如果哪位兄弟知道了怎么使用,请给我留言.谢谢

oracle 触发器冒号,触发器if else写法 oracle触发器相关推荐

  1. oracle dml触发器写法,Oracle DML类型触发器

    Oracle DML类型触发器是Oracle开发过程中最常用和最常见的触发器,主要用于DML操作,例如: 插入,删除,更新操作事件触发器. 由DML类型触发器安装的事件触发前后和数据触发器的类型可以分 ...

  2. oracle 触发器登录,【学习笔记】Oracle触发器 实现指定用户登录oracle案例

    天萃荷净 触发器实现指定用户登录oracle,分享一篇关于Oracle数据库安全策略,通过Oracle触发器实现限定user用户登录Oracle数据库的方法 1.创建允许登录用户表 CREATE TA ...

  3. Oracle入门(十四.19)之触发器简介

    一.触发器的需求 让我们从一个例子开始吧:一条业务规则规定,只要员工的工资发生变化,变更就必须记录在日志记录表中. 可以创建两个过程来执行此操作: UPD_EMP_SAL更新工资,LOG_SAL_CH ...

  4. 使用plsql创建oracle,在Oracle下使用PLSQL Developer创建简单的触发器

    环境:PLSQL Developer 7.1.5 + Oracle 11.2.0 问题:在Oracle下使用PLSQL Developer创建简单 的触发器. 解决: 步骤一:在PLSQL Devel ...

  5. oracle 的自增需要依靠序列和触发器共同实现

    oracle的自增需要依靠序列和触发器共同实现 比如 先创建一个表 create table test (id int primary key, name varchar2(10)); 创建一个序列 ...

  6. Oracle 创建表、定义序列以及创建触发器

    Oracle 创建表.定义序列以及创建触发器 1. 定义序列 CREATE SEQUENCE <序列名>[MAXVALUE N|NOMAXVALUE][MINVALUE N|NOMINVA ...

  7. oracle dml触发器 获取当前执行sql语句,Oracle DML触发器

    DML触发器的要点 DML触发器是定义在表上的触发器,由DML事件引发.编写DML触发器的要素是: * 确定触发的表,即在其上定义触发器的表. * 确定触发的事件,DML触发器的触发事件有INSERT ...

  8. oracle语句加减,oracle时间加减的语句写法

    oracle时间加减运算我们经常会用到,下面就为您介绍oracle时间加减的实现方法,如果您遇到过oracle时间加减的问题,不妨一看. 加法 select sysdate,add_months(sy ...

  9. 手写oracle分页,oracle分页代码(超简略写法)

    当前位置:我的异常网» 数据库 » oracle分页代码(超简略写法) oracle分页代码(超简略写法) www.myexceptions.net  网友分享于:2013-09-26  浏览:5次 ...

  10. oracle的存储过程写法Oracle中如何写存储过程

    ​​Oracle的存储过程基本写法​​ Oracle存储过程简介: 存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务 ...

最新文章

  1. 程序分析的一些概念总结
  2. 运维企业专题(9)RHCS集群工具介绍
  3. 让植物“张嘴说话”!新加坡“植物机器人”可成为环境探测器促进农业生产...
  4. Android的开机流程
  5. Sql Server2005一則怪現象
  6. AtCoder Regular Contest 098
  7. Nginx学习之五:Nginx第三方模块
  8. hive 自定义元数据表_Hive分区表和桶表的使用
  9. Taro+react开发(16)--跳转拿参
  10. Python二级笔记(5)
  11. angularjs的基础知识
  12. java 浅克隆_(Java)浅克隆与深克隆的区别
  13. 全面的framebuffer详解一
  14. 证券计算机行业研究,20210630-首创证券-计算机行业深度报告:物联网,研究框架.pdf...
  15. DB2 表的常用命令
  16. Android开发:申请小米开发者账号步骤
  17. Android个人日常消费理财_财务软件
  18. Python(求第五个人岁数)
  19. Windows/Linux内核地址空间管理的异同
  20. 微信小程序 接入第三方地图

热门文章

  1. Spring-Boot-4-Dao层
  2. [Java]Swing窗体演示ZIP压缩流的压缩与解压
  3. 常见深度学习模型集成方法
  4. C# winform语音提示
  5. JavaScript实验2
  6. 基于java springboot兼职小程序源码(毕设)
  7. CPU卡程序设计实例(十三)终端向ESAM发送数据
  8. 用YourUninstaller将JDK卸载干净
  9. 为什么领导不喜欢提拔老实人?这是我听过最醍醐灌顶的回答
  10. 通俗理解GRU网络原理