PL/SQL之流程控制语句

来源:互联网 发布:硅谷密探软件 编辑:程序博客网 时间:2024/05/24 06:16

流程控制:IF语句;CASE语句;

循环语句:LOOP语句,EXIT语句;

顺序语句:GOTO语句,NULL语句;

1.条件语句

语法:

IF <布尔表达式> THEN  SQL语句和PL/SQL语句END IF;-----------------------------IF <布尔表达式> THEN  SQL语句和PL/SQL语句ELSE  其他SQL语句和PL/SQL语句END IF;-----------------------------IF <布尔表达式> THEN  SQL语句和PL/SQL语句ELSIF <布尔表达式> THEN  SQL语句和PL/SQL语句.....可以多个elsifELSE  SQL语句和PL/SQL语句END IF;
特别注意:elsif千万不能写成elseif,这是PL/SQL设计者的问题

实例使用:

第一步,创建表,插入数据

create table mytest(    id number(3),    name varchar2(20),    age number(3)  );  insert into mytest values(1,'one',18);  insert into mytest values(2,'two',20);  insert into mytest values(3,'three',24);  commit;
第二步,使用条件语句

DECLARE  v_age mytest.age%TYPE;BEGIN  SELECT age INTO v_age FROM mytest WHERE id=1;  IF v_age < 18 THEN--条件判断开始    DBMS_OUTPUT.PUT_LINE('未成年');  ELSIF v_age >= 18 AND v_age <= 30 THEN    DBMS_OUTPUT.PUT_LINE('青年人');  ELSIF v_age > 30 AND v_age <= 60 THEN    DBMS_OUTPUT.PUT_LINE('中年人');  ELSE    DBMS_OUTPUT.PUT_LINE('老年人');  END IF;--条件判断结束EXCEPTION  WHEN OTHERS THEN    DBMS_OUTPUT.PUT_LINE('异常抛出');END;

2.CASE表达式

CASE表达式有两种格式,在SQL和PL/SQL不一样的是,sql中以end结束,pl/sql中以end case结束。

格式一:

CASE 条件表达式   WHEN 表达式结果1 THEN    语段1  WHEN 表达式结果2 THEN    语段2    ...  [ELSE 语句段]--else为可选END CASE;

实例:

DECLARE  v_age mytest.age%TYPE;BEGIN  SELECT age INTO v_age FROM mytest WHERE id = 1;  CASE v_age < 18 WHEN TRUE THEN      DBMS_OUTPUT.PUT_LINE('未成年人');    ELSE      DBMS_OUTPUT.PUT_LINE('成年人');  END CASE;EXCEPTION   WHEN OTHERS THEN    DBMS_OUTPUT.PUT_LINE('抛出异常');END;

格式二:

CASE WHEN 表达式1 THEN   语段1  WHEN 表达式2 THEN   语段2   ...  [ELSE 语句段]--可选END CASE;
实例:

DECLARE  v_age mytest.age%TYPE;BEGIN  SELECT age INTO v_age FROM mytest WHERE id = 1;  CASE WHEN v_age < 18 THEN      DBMS_OUTPUT.PUT_LINE('未成年');    WHEN v_age >=18 AND v_age <= 60 THEN      DBMS_OUTPUT.PUT_LINE('中年人');    ELSE      DBMS_OUTPUT.PUT_LINE('老年人');  END CASE;--case语句结束EXCEPTION  WHEN OTHERS THEN    DBMS_OUTPUT.PUT_LINE('年龄分段开个玩笑异常了');END;--整个块语句结束

3.3循环

  1.简单循环

   语法:

LOOP  执行目标语句;  EXIT WHEN <判断条件>;--当不满足条件时,退出循环END LOOP;--结束循环

   实例:

DECLARE  v_count NUMBER(2):=0;BEGIN  LOOP    v_count := v_count+1;    DBMS_OUTPUT.PUT_LINE(v_count);    EXIT WHEN v_count = 5;  END LOOP;END;

  2.while循环

   语法:

WHILE 布尔表达式 LOOP--满足条件进入循环  执行目标语句;END LOOP;--结束循环

   实例:

DECLARE  v_count NUMBER(2):=1;BEGIN  WHILE v_count<6 LOOP    DBMS_OUTPUT.PUT_LINE('循环次数为:'||v_count);    v_count := v_count+1;  END LOOP;END;

  3.数字循环

   语法:

FOR 循环计数器 IN [REVERSE] 上限..下限 LOOP  执行目标语句;END LOOP;--不加reverse,循环变量自动加1,使用reverse循环变量自动减1.--上限,下限必须是整数,可以用exit退出循环

   实例:

DECLARE  v_count NUMBER(2):= 5;BEGIN  FOR INT IN 1..v_count LOOP--在in后面加上reverse能看到不同的效果    DBMS_OUTPUT.PUT_LINE(INT);  END LOOP;END;

3.4标号和GOTO语句

无条件跳转到指定的标号去,语法:

GOTO LABEL;......<<LABEL>>;--标号是用<<>>括起来的标识符

实例:

DECLARE  v_age mytest.age%TYPE := 19;BEGIN  IF v_age < 18 THEN    GOTO firstGoto;  ELSE    GOTO lastGoto;  END IF;  <<firstGoto>>  DBMS_OUTPUT.PUT_LINE('跳转到第一个goto');  <<lastGoto>>  DBMS_OUTPUT.PUT_LINE('跳转到第二个goto');END;
注意,GOTO不能进行以下跳转:

不能跳转到循环,条件语句中;

不能从异常处理部分在跳回转执行部分,逻辑乱套;

不能跳转到字块中;

不能从条件语句的一部分跳转到另一部分,违反条件语句的执行逻辑;

3.5NUL语句

NULL语句使用范围很广,包括查询判断,条件判断,计算等。

0 0
原创粉丝点击