一、条件判断
1.if语句
语法:if 表达式 then
代码块
elsif 表达式 then
代码块
……
else
代码块
end if;
DECLARE
V_EMPNO EMP.EMPNO%TYPE;
BEGIN
SELECT EMPNO INTO V_EMPNO FROM EMP WHERE EMPNO=&员工编号;
IF V_EMPNO=7369 THEN
DBMS_OUTPUT.PUT_LINE(1);
ELSE
DBMS_OUTPUT.put_line('其他');
END IF;
END;
注意:if中的表达式必须是true或者是false。
if中使用is null取判断的时候,判断的是单个字段,而不是整条数据。
2.case when
语法1:case 变量
when 值1 then
代码块
when 值2 then
代码块
……
else
代码块
end case;
DECLARE
V_EMPNO EMP.EMPNO%TYPE;
BEGIN
SELECT EMPNO INTO V_EMPNO FROM EMP WHERE EMPNO=&员工编号;
CASE V_EMPNO
WHEN 7369 THEN
DBMS_OUTPUT.PUT_LINE(1);
WHEN 7499 THEN
DBMS_OUTPUT.put_line(2);
ELSE
DBMS_OUTPUT.PUT_LINE('其他');
END CASE;
END;
语法2:case
when 表达式 then
代码块
when 表达式 then
代码块
……
else
代码块
end case;
DECLARE
V_SAL EMP.SAL%TYPE;
BEGIN
SELECT SAL INTO V_SAL FROM EMP WHERE EMPNO=&员工编号;
CASE
WHEN V_SAL>3000 THEN
DBMS_OUTPUT.put_line(5);
WHEN V_SAL BETWEEN 2001 AND 3000 THEN
DBMS_OUTPUT.put_line(4);
WHEN V_SAL BETWEEN 1401 AND 2000 THEN
DBMS_OUTPUT.PUT_LINE(3);
ELSE
DBMS_OUTPUT.PUT_LINE('其他');
END CASE;
END;
二、循环语句
1.loop循环,满足条件时退出循环
语法:loop
控制退出-exit when
代码执行
end loop;
--使用loop循环打印0到9的数
DECLARE
I NUMBER:=0;
BEGIN
LOOP
EXIT WHEN I>9;
DBMS_OUTPUT.PUT_LINE(I);
I:=I+1;
END LOOP;
END;
2.while循环,满足条件时进入循环
语法:while 表达式 loop
逻辑代码
end loop;
DECLARE
I NUMBER:=1;
BEGIN
WHILE i<=9 LOOP
DBMS_OUTPUT.PUT_LINE(I);
I:=i+1;
END LOOP;
END;
当while后面的表达式不成立时退出循环
3.for循环,不需要声明变量,IN后的范围是连续的
语法:for 变量 in(范围/select语句) loop
逻辑代码
end loop;
当in后面是一个范围,循环遍历打印1到9
begin
FOR I IN 1..9 LOOP
DBMS_OUTPUT.PUT_LINE(I);
END LOOP;
END;
遍历select语句,for循环遍历select语句时必须加括号
begin
FOR V_EMP IN (SELECT * FROM EMP) LOOP
DBMS_OUTPUT.PUT_LINE(V_EMP);
END LOOP;
END;
4.GOTO标签,可以无条件跳转,影响程序的调试,可读性
DECLARE
I NUMBER := 1;
BEGIN
<>
DBMS_OUTPUT.PUT_LINE(I);
I := i + 1;
IF I <= 9 THEN
GOTO AA;
ELSE
RETURN;
END IF;
END;
5.循环退出语句
exit:退出当前循环
continue:跳过当前条件的循环
return:结束所有循环,包括循环外的其他代码
三、条件判断练习题
1.输入三个正整数,由小到大排列打印出来
DECLARE
I NUMBER:=&第一个整数;
J NUMBER:=&第二个整数;
Z NUMBER:=&第三个整数;
V_NO NUMBER;
BEGIN
if I>J THEN
V_NO:=I;
I:=J;
J:=V_NO;
END IF;
if I>Z THEN
V_NO:=Z;
Z:=I;
I:=V_NO;
END IF;
if J>Z THEN
V_NO:=Z;
Z:=J;
J:=V_NO;
END IF;
DBMS_OUTPUT.PUT_LINE(I||'<'||J||'<'||Z);
END;
2.判断一个年份是不是闰年(能够被4整除并且不能被100整除或者是能够被400整除)
DECLARE
N NUMBER:=&年份;
BEGIN
IF MOD(N,4)=0 AND MOD(N,100)<>0 OR MOD(N,400)=0 THEN
DBMS_OUTPUT.PUT_LINE(N||'年是闰年');
ELSE
DBMS_OUTPUT.PUT_LINE(N||'年不是闰年');
END IF;
END;
四、循环语句练习题
1.计算s=1*2+2*3+....+N*(N+1)的值;当N=5的时候。
DECLARE
V_SUM NUMBER:=0;
BEGIN
FOR I IN 1..5 LOOP
V_SUM:=V_SUM+I*(I+1);
END LOOP;
DBMS_OUTPUT.PUT_LINE(V_SUM);
END;
2.编程序求满足不等式 1+3^2+5^2+?+N^2>2000的最小N值;
DECLARE
I NUMBER:=1;
V_SUM NUMBER :=0;
BEGIN
LOOP
EXIT WHEN V_SUM>2000;
V_SUM:=V_SUM+POWER(I,2);
DBMS_OUTPUT.PUT_LINE(I);
I:=I+2;
END LOOP;
END;
3.计算S=1!+2!+…+10! 示例:2!=1*2; 3!=1*2*3
用外层循环计算n的阶乘和,内层循环计算n的阶乘在第一层循环中在给v_jc赋初始值是因为当第一次循环之后他的初始值就不是1了
DECLARE
V_JC NUMBER:=1;
V_SUM NUMBER:=0;
BEGIN
FOR I IN 1..10 LOOP
V_JC:=1;
FOR J IN 1..I LOOP--计算n的阶乘
V_JC:=V_JC*J;
END LOOP;
V_SUM:=V_SUM+V_JC;
DBMS_OUTPUT.PUT_LINE('最终值为:'||V_SUM);
END LOOP;
END;
4.使用循环打印出99乘法表
BEGIN
FOR I IN 1..9 LOOP
FOR J IN 1..I LOOP
DBMS_OUTPUT.PUT(J||'X'||I||'='||J*I||' ');
END LOOP;
DBMS_OUTPUT.NEW_LINE();
END LOOP;
END;