oracle 条件语句的写法
1.基本的if else
DECLARE I INT :=1; BEGIN IF I=1 THEN DBMS_OUTPUT.PUT_LINE('TRUE'); ELSE DBMS_OUTPUT.PUT_LINE('FALSE'); END IF; END;
2.这里用的是elsif 而不是 else if(注意区分一下就行了)
DECLARE I INT :=1; --如果I=1 满足第一个条件之后,就不会再走第二个条件 --如果I=5,则直接走最后的一个条件 BEGIN IF I<4 THEN DBMS_OUTPUT.PUT_LINE('4'); ELSIF I<3 THEN DBMS_OUTPUT.put_line('3'); ELSIF I<2 THEN DBMS_OUTPUT.PUT_LINE('2'); ELSE DBMS_OUTPUT.PUT_LINE('0'); END IF; END;
3.decode语法
--DECODE('条件',值1,真,假) --简单实例一 SELECT DECODE((2-2),0,'TRUE','FALSE') FROM DUAL; --结果返回true --简单实例二;比较两个数的大小; --先介绍一函数的使用sign() 它只会返回三个值:1 0 -1 SELECT SIGN(2-1) FROM DUAL; --正数就返回1 SELECT SIGN(2-2) FROM DUAL; --0 就返回0 SELECT SIGN(2-3) FROM DUAL; --负数就返回-1 --然后配合它 我们可以比较两个数的大小滴呀 DECLARE I INT :=2; J INT :=3; RESULT INT :=0; BEGIN SELECT DECODE(SIGN(I-J),-1,I,J) INTO RESULT FROM DUAL; --比较连个数,求最小或者最大的数 DBMS_OUTPUT.put_line(RESULT); --这样我们就求出了最小的一个数值滴呀 END; --实例三(字段) DECLARE NAME VARCHAR2(99) :='DD'; RESULT VARCHAR2(99) ; BEGIN SELECT DECODE(NAME,'JACK','JACK','TOM','TOM','DEFAULUT') INTO RESULT FROM DUAL; --第一个参数值 也可以是我们的字段; --字段,比较,值1,比较,值2,默认值 --进行这样的基本模式比较低呀 DBMS_OUTPUT.put_line(RESULT); END;
DECODE的应用 ,下面我们看这样的一个需求;
CREATE TABLE STUINFO( ID NUMBER, NAME VARCHAR2(40), SEX VARCHAR2(4) ) INSERT INTO STUINFO VALUES(1,'JACK','男'); INSERT INTO STUINFO VALUES(2,'TOM','男'); INSERT INTO STUINFO VALUES(3,'ANDY','女'); INSERT INTO STUINFO VALUES(4,'CANDY','女'); COMMIT; --现在我们来统计班上 男生多少人,女生多少人; --方法一; SELECT COUNT(*) FROM STUINFO WHERE SEX='男'; SELECT COUNT(*) FROM STUINFO WHERE SEX='女'; --方法二;(如果id没有重复的话) --我们再求一次和 --方法虽然有点绕弯,但是可以锻炼我们写sql语句的能力滴呀 SELECT SUM(MEN_COUNT) "男生总和",SUM(FEMEL_COUNT) "女生总和" FROM ( SELECT ID, SUM(CASE SEX WHEN '男' THEN 1 ELSE 0 END) "MEN_COUNT", SUM(CASE SEX WHEN '女' THEN 1 ELSE 0 END) "FEMEL_COUNT" FROM STUINFO GROUP BY ID ) --方法三,自然就用到我们的DECODE --这样用起来的 相当的方便 SELECT SUM(DECODE(SEX,'男',1,0)) "MEN_TOTAL", SUM(DECODE(SEX,'女',1,0)) "女生总和" FROM STUINFO
4.case when 的用法
关于学生等级的分法;
--关于学生成绩 分等级的计算滴呀 --CASE WHEN 字段 THEN 的用法; SELECT NAME, CASE WHEN GREADE >85 THEN '优秀' WHEN GREADE >70 THEN '良好' WHEN GREADE >60 THEN '及格' ELSE '不及格' END "等级" FROM STU --然后是我们DEcode 的使用方法滴呀 SELECT NAME, DECODE(SIGN(GREADE-85),1,'优秀',0,'优秀',-1, DECODE(SIGN(GREADE-70),1,'良好',0,'良好,-1', DECODE(SIGN(GREADE-60),1,'及格',0,'及格',-1,'不及格') )) "等级" FROM STU
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 2025成都.NET开发者Connect圆满结束