判断 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;