PLSQL判断和循环

判断 IF

分支判断

DECLARE

BEGIN
	IF 条件1....
		THEN 代码     ---当满足条件1时,要执行的代码
		ELSIF 条件2...
			THEN 代码2  ---当满足条件2时要执行的代码
			ELSIF 条件3.. 
			then 代码3....
			.....
			ELSE 其他代码   ---当不满足以上所有条件时,要执行的代码
    END IF;
END;

注意:当满足其中一个条件时,要执行对应的代码,然后直接跳到END IF结束判断
例题:
输入一个员工编号如果该员工工资小于2000则输出小于2000 x小于3000则输出小于3000

DECLARE
  E_no emp.empno%TYPE:='&请输入';
  E_sal emp.sal%TYPE;
BEGIN
  SELECT sal 
  INTO E_sal
  FROM emp WHERE empno = E_No;
  IF E_SAL<2000
    THEN dbms_output.put_line('小于2000');
    ELSIF E_SAL>2000 AND E_SAL<=3000
    THEN dbms_output.put_line('小于3000');
    ELSE dbms_output.put_line('大于3000');
  END IF;
END;

练习:输入一个员工编号,如果该员工时30号部门员工

DECLARE
  V_SAL    EMP.SAL%TYPE;
  V_NO     EMP.EMPNO%TYPE := '&请输入';
  V_DEPTNO EMP.DEPTNO%TYPE;
BEGIN
  SELECT SAL, DEPTNO INTO V_SAL, V_DEPTNO FROM EMP WHERE EMPNO = V_NO;
  IF V_DEPTNO = 30 THEN
    DBMS_OUTPUT.PUT_LINE(V_SAL);
    UPDATE EMP
       SET SAL = SAL * 1.03
     WHERE EMPNO = V_NO
    RETURNING SAL INTO V_SAL;
    DBMS_OUTPUT.PUT_LINE(V_SAL);
  ELSIF V_DEPTNO = 20 THEN
    DBMS_OUTPUT.PUT_LINE(V_SAL);
    UPDATE EMP
       SET SAL = SAL * 1.02
     WHERE EMPNO = V_NO
    RETURNING SAL INTO V_SAL;
    DBMS_OUTPUT.PUT_LINE(V_SAL);
  ELSIF V_DEPTNO = 10 THEN
    DBMS_OUTPUT.PUT_LINE(V_SAL);
    UPDATE EMP
       SET SAL = SAL * 1.01
     WHERE EMPNO = V_NO
    RETURNING SAL INTO V_SAL;
    DBMS_OUTPUT.PUT_LINE(V_SAL);
  END IF;
END;

循环

LOOP循环

死循环,无限循环
需要配合退出循环
语法:

DECLARE

BEGIN
	LOOP        	   ---循环的开始
		        	   ---循环主体(循环的内容)
					   ---控制循环次数--并不是一定要有的
	EXIT WHEN 条件      ---退出条件,满足条件退出循环
END;

例题:打印输出100-1之间的偶数

DECLARE
  n NUMBER(10):=100;
BEGIN
  LOOP             
   IF MOD(n,2) = 0
     THEN
      dbms_output.put_line(n);
      
   END IF;
   n:=n-1;
  EXIT WHEN n=1;   
  END LOOP;  
END;

WHILE循环

自带条件的循环,只有满足条件才能进入循环

DELCARE
BEGIN
	WHILE 条件      --满足条件进入循环
		LOOP       --循环开始
					--循环主体
					--控制循环次数
	END LOOP;
END;
DECLARE
n number:=1;
BEGIN
	WHILE n<101  
		LOOP       
		dbms_output.put_line(n);		
		n:=n+1	

	END LOOP;
END;

FOR循环

最常见最好用最简单最牛的循环。
语法:

DECLARE
BEGIN
	FOR 变量 IN x..y | (SQL语句) | 游标    ---变量是for循环自带的变量,用来接受后面的x,y,sql语句等等
									     ---
		LOOP                  		     ---循环主体
		END LOOP;
END;

for循环的反转
REVERSE

DECLARE
BEGIN
  FOR i IN REVERSE 1..100             
    LOOP     
      dbms_output.put_line(i);
    END LOOP;
END;

使用reverse实现从100到1

习题:练习打印输出100-1之间的奇数、

DECLARE
BEGIN
  FOR i IN REVERSE 1..100             
    LOOP      
      IF MOD(i,2)=1
        THEN
      dbms_output.put_line(i);
      END IF;
    END LOOP;
END;

输入一个字符,反向打印该字符;

DECLARE 
 v_char VARCHAR2(200):='&请输入';
BEGIN
  FOR I IN REVERSE 1..LENGTH(V_char) LOOP
     dbms_output.put_line(SUBSTR(V_char,i,1)); 
     END LOOP;
  END;

FOR 循环的嵌套

外层的循环执行一次,内层的循环,循环全部

DECLARE
BEGIN
	FOR i IN 1..24 LOOP
		FOR j IN 1..60 LOOP
			 
END;

练习
打印输出99乘法表

DECLARE
BEGIN
  FOR I IN 1 .. 9 LOOP
    FOR J IN 1 .. i LOOP
      DBMS_OUTPUT.PUT(j||'*'||i||'='||i*j);
      DBMS_OUTPUT.PUT(' ');
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
  END LOOP;
END;
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值