传说:PL/SQL不仅可以嵌入SQL语句
还可以支持条件分支语句(IF,CASE)、循环语句(LOOP)和顺序控制语句(GOTO,NULL)
☆条件分支语句
1.简单条件判断
DECLARE
v_sal NUMBER(6,2);
BEGIN
SELECT sal INTO v_sal FROM emp
WHERE lower(ename)=lower('&&name');
IF v_sal<2000 THEN
UPDATE emp SET sal=v_sal+200
WHERE lower(ename)=lower('&name');
END IF;
END;
/
2.二重条件分支
DECLARE
v_comm NUMBER(6,2);
BEGIN
SELECT comm INTO v_comm FROM emp
WHERE empno=&&no;
IF v_comm<>0 THEN
UPDATE emp SET comm=v_comm+100
WHERE empno=&no;
ELSE
UPDATE emp SET comm=200
WHERE empno=&no;
END IF;
END;
/
输入no的值:xxx
3.多重条件分支
DECLARE
v_job VARCHAR2(10);
V_sal NUMBER(6,2);
BEGIN
SELECT job,sal INTO v_job,v_sal
FROM emp WHERE empno=&&no;
IF v_job='PRESIDENT' THEN
UPDATE emp SET sal =v_sal+1000 WHERE empno=&no;
ELSEIF v_job='MANAGER' THEN
UPDATE emp SET sal=v_sal+500 WHERE empno=&no;
ELSE
UPDATE emp SET sal=v_sal+200 WHERE empno=&no;
END IF;
END;
☆CASE语句
CASE语句主要处理多重条件分支。
1.使用单一选择符进行等值比较
DECLARE
v_deptno emp.deptno%TYPE;
BEGIN
v_deptno:=&no;
CASE v_deptno
WHEN 10 THEN
UPDATE emp SET comm=100 WHERE deptno=v_deptno;
WHEN 20 THEN
UPDATE emp SET comm=80 WHERE deptno=v_deptno;
WHEN 30 THEN
UPDATE emp SET comm=30 WHERE deptno=v_deptno;
ELSE
dbms_output.putline('不存在该部门');
END CASE;
END;
/
2.在CASE语句中使用多种条件比较
当使用单一条件选择符进行等值比较时,可以使用CASE xxx 语法来实现,如果包含有多种条件进行不等比较,那么必须在WHEN子句中指定比较条件
DECLARE
v_sal emp.sal%TYPE;
v_ename emp.ename%TYPE;
BEGIN
SELECT sal ,ename INTO v_sal,v_ename FROM emp
WHERE empno=&no;
CASE
WHEN v_sal<1000 THEN
UPDATE emp SET comm=100 WHERE ename=v_ename;
WHEN v_sal<2000 THEN
UPDATE emp SET comm=80 WHERE ename=v_ename;
WHEN v_sal<6000 THEN
UPDATE emp SET comm=50 WHERE ename=v_ename;
END CASE;
END;
/
☆循环语句
1.基本循环
DECLARE
i INT:=1;
BEGIN
LOOP
INSERT INTO temp VALUES(i);
EXIT WHEN i=10;
i:=i+1;
END LOOP;
END;
/
2.WHILE循环
基本循环至少执行一次循环体内的语句,而对于WHILE循环来说,只有条件为TRUE才会执行循环体内的语句。
以WHILE..LOOP 开始 END LOOP结束。
DECLARE
i INT:=1;
BEGIN
WHILE i<=10 LOOP
INSERT INTO temp VALUES(i);
i:=i+1;
END LOOP;
END;
/
3.FOR循环
BEGIN
FOR i IN 1..10 LOOP
INSERT INTO temp VALUES(i);
END LOOP;
END;
/
* 4.嵌套循环和标号
指在一个循环语句中嵌入另一个循环语句,而标号(Label)则用于标记嵌套块或嵌套循环。
DECLARE
result INT;
BEGIN
<>
FOR i IN 1..100 LOOP
<>
FOR j IN 1..100 LOOP
result:=i*j;
EXIT outer WHEN result=1000;
EXIT WHEN result=500;
END LOOP inner;
dbms_output.put_line(result);
END LOOP outer;
dbms_output.put_line(result);
END;
/
.....这个说是当执行以上PL/SQL块时,如果result=1000,那么会直接退出外层循环,而当result=500时只会退出内层循环。
到目前为止,这个循环我还不明所以....
*4顺序控制语句
GOTO 和 NULL语句,一般情况不要使用,影响发育,暂且略。