oracle 条件语句的写法

时间:2021-10-15 10:37:56

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('');
ELSIF I<3 THEN
DBMS_OUTPUT.put_line('');
ELSIF I<2 THEN
DBMS_OUTPUT.PUT_LINE('');
ELSE
DBMS_OUTPUT.PUT_LINE('');
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