一、控制执行流 可以是分支和循环:IF THEN END IF IF condition THEN statements; [ELSIF condition THEN statements;] [ELSE statements;] END IF; 例子:IF V_ENAME='OSBORNE' THEN V_MGR:=22; END IF; 这里我们可以注意,PLSQL和C语言或JAVA在条件上的不同,=代表关系运算,而:=代表赋值。 看一个函数: create FUNCTION calc_val (v_start IN NUMBER) RETURN NUMBER IS BEGIN IF v_start > 100 THEN RETURN (2 * v_start); ELSIF v_start >= 50 THEN RETURN (.5 * v_start); ELSE RETURN (.1 * v_start); END IF; END calc_val; 现在,虽然我们尚未讲解CREATE 函数或过程,但可以看到IF 条件在其中的作用。 二、注意LOGIC TABLE中的逻辑对应关系 1、NOT、AND、OR 2、任何表达式中含有空值结果都为 NULL 3、连接字符串中含有空值会把NULL作为 EMPTY STRING declare v_deptno dept.deptno%type; v_loc dept.loc%type; V_FLAG BOOLEAN ; V_REC BOOLEAN :=FALSE; --此值改为TRUE、NULL、FALSE进行不同的比较 V_AVA BOOLEAN:=NULL; begin V_FLAG:=V_REC AND V_AVA; IF V_FLAG=TRUE THEN DBMS_OUTPUT.PUT_LINE ('TRUE'); ELSIF V_FLAG=FALSE THEN DBMS_OUTPUT.PUT_LINE ('FALSE'); ELSE DBMS_OUTPUT.PUT_LINE ('NULL'); END IF; end; / 值得注意的是:NULL AND FALSE ---> FALSE 这是在实践中总结出来的。 三、基本循环基础: 1、LOOP statement1; statement2; . . . EXIT [WHEN condition]; END LOOP; v_ord_id s_item.ord_id%TYPE := 101; v_counter NUMBER (2) := 1; BEGIN . . . LOOP INSERT INTO s_item (ord_id, item_id) VALUES (v_ord_id, v_counter); v_counter := v_counter + 1; EXIT WHEN v_counter > 10; END LOOP; 2、FOR循环: FOR index IN [REVERSE] lower_bound..upper_bound LOOP statement1; statement2; . . . END LOOP;
实例:DECLARE V_LOWER NUMBER:=1; V_UPPER NUMBER:=23; BEGIN DBMS_OUTPUT.PUT_LINE(''); FOR I IN V_LOWER..V_UPPER LOOP DBMS_OUTPUT.PUT_LINE(I); END LOOP; END; / 3、WHILE 循环: WHILE condition LOOP statement1; statement2; . . . END LOOP; 4、循环是可以多层嵌套的。可以用<