1、IF语句
2、CASE语句的语法格式:
CASE [selector] WHEN 表达式1 THEN 语句序列1; WHEN 表达式2 THEN 语句序列2; WHEN 表达式3 THEN 语句序列3; …. WHEN 表达式n THEN 语句序列n; [ ELSE 语句序列n+1;] END [CASE];
- selector表达式可以任意复杂,可以包含函数的调用,通常只由单个变量组成.
- selector表达式只计算一次。
- 表达式产生的值可以是除了BLOB、BFILE、对象类型、PL/SQL记录类型、索引表类型、变长数组类型、嵌套表类型以外的所有类型
例1:根据ORDERDETAILS表中某产品的总销量分别对其销量进行评定,并输出为优秀、很好、较好、较差、很差
DECLARE TYPE rec_prodquant IS RECORD (v_prod orderdetails.productid%type, v_sumquantity orderdetails.quantity%type ); rec_prod rec_prodquant; --存放产品编号,总销量的记录类型 v_jg varchar2(20); --存放优秀、很好、较好、较差、很差等值 BEGIN --查询出某产品的编号和总销量存放到记录变量中 SELECT productid,sum(quantity) INTO rec_prod FROM orderdetails WHERE productid=&no group by productid; --根据总销量判断其销量的档次 CASE WHEN rec_prod.v_sumquantity>=50 THEN v_jg:='销量优秀' ; WHEN rec_prod.v_sumquantity>=40 THEN v_jg:='销量很好'; WHEN rec_prod.v_sumquantity>=30 THEN v_jg:='销量较好' ; WHEN rec_prod.v_sumquantity>=10 THEN v_jg:='销量较差'; ELSE v_jg:='销量很差'; END CASE; --输出产品编号、总销量、销量的档次 dbms_output.put_line(rec_prod.v_prod || ' ' || rec_prod.v_sumquantity || ' ' || v_jg); END;
3、LOOP循环
例2:创建一个测试表,包含列ID,NAME两个列,并向该表插入50条测试记录
DECLARE v_Loop integer:= 1; BEGIN LOOP INSERT INTO test VALUES (v_Loop,‘a’|| v_Loop); v_Loop:= v_Loop + 1; EXIT WHEN v_Loop > 50;双竖线(||):Oracle使用双竖线表示字符串连接函数 END LOOP; END;
4、WHILE循环
while循环是当控制条件为真时,重复执行循环体内的语句;当控制条件不再为真时,终止循环体内的语句执行。
语法格式: WHILE condition LOOP 执行语句段; END LOOP;
例3 向表test_table插入50条测试记录(WHILE循环)
DECLARE v_Loop binary_integer := 1; BEGIN WHILE V_loop<=50 LOOP INSERT INTO test VALUES (v_Loop,‘a’); v_loop:=v_loop+1; END LOOP; END;
5、FOR循环
一般用于有限次地重复执行一组语句。其循环次数由计数器来指定。
语法格式: FOR 循环变量 IN [reverse] 循环下界..循环上界 LOOP 循环处理语句段; END LOOP;
说明:
- 循环控制变量不需要在DECLARE中显式定义;系统隐含将它声明为binary_integer变量;
- reverse 表示索引变量的值从大到小;
- 循环变量只能在循环体中使用,不能再循环体外使用。
例4:向表test_table插入50条测试记录(FOR循环)
BEGIN FOR v_loop IN REVERSE 1..50 LOOP INSERT INTO test_table (ID,NAME) VALUES (v_Loop,’a’||v_loop); END LOOP; END;