PL/SQL学习笔记(三)—— 流程控制

一、条件判断

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;

PL/SQL学习笔记(三)—— 流程控制_第1张图片

你可能感兴趣的:(plsql,流程控制,Oracle,sql,数据库,plsql)