PL/SQL的流程控制语句分为三种:
条件语句:IF语句,CASE语句。 循环语句:LOOP语句,EXIT语句。顺序语句:GOTO语句,NULL语句。IF 布尔表达式 THEN
sql语句和pl/sql 语句;
END IF;
或
IF 布尔表达式 THEN
pl/sql语句和SQL语句;
ELSE
其他语句;
END IF;
或
IF 布尔表达式 THEN
pl/sql语句和SQL语句;
ELSIF 布尔表达式 THEN
其他语句;
ELSIF 布尔表达式 THEN
其他语句;
注意:ELSIF 不要写成 ELSEIF。
例子:
DECLARE V_empno emp.salary%type :=&empno; V_comment varchar2(25); BEGIN select salary into V_sal from emp where empno=V_empno; if V_sal>5000 then V_comment:='有点少'; elsif V_sal>8000 then V_comment :='还不错'; else V_coment :='你很棒哦'; end IF; dbms_output.put_line(V_coment); END;例子:
DECLARE V_grant char(1) :=&grant; V_rank varchar2(10); BEGIN V_rank= case V_grant when 'A' then '你真棒' when 'B' then '你可以啊' when 'C' then '一般般哦' else '好差' end; dbms_output.put_line('grant:' ||V_rank ); END;例子:
DECLARE i number(2):=0; BEGIN LOOP i:=i+1; dbms_output.put_line(i); EXIT when i=10; END LOOP; END;例子:
DECLARE i number(2):=0; WHILE i<10 LOOP dnms.output.put_line(i); i:=i+1; END LOOP; END;其中: 1.每循环一次,循环变量自动+1;加上reverse关键字,每循环一次,循环变量自动-1。 2.跟在in reverse后面的数字必须从小到大,但不一定是整数,可以是能转换成整数的表达式。 例子:
BEGIN for i in 1..5 loop dbms_output._put_line(i); end loop; for i in reverse 1..5 loop dbms_output._put_line(i); end loop; END;PL/SQL中GOTO是无条件调到指定标号中。
一般形式为: GOTO label; .... <<label>>例子:
BEGIN for i in 1..5 then loop dbms_output.put_line('我还没跳,我是:'||i); end loop; if i=3 then goto lee; end if; <<lee>> dbms_output.put_line('我跳了,我是:'||i);