• PL/SQL之流控制语句


    1、选择控制语句

    --语法1--
    IF
    条件 THEN 语句; END IF; DECLARE v_Salary NUMBER(8,2); BEGIN SELECT salary INTO v_Salary FROM auths WHERE name='张三'; IF v_Salary IS NOT NULL THEN DBMS_OUTPUT.PUT_LINE(v_Salary); END IF; END;
    --语法2--
    IF 条件 THEN 语句1; ELSE 语句2; END IF; DECLARE v_Salary NUMBER(8,2); BEGIN SELECT salary INTO v_Salary FROM auths WHERE name='张三'; IF v_Salary IS NOT NULL THEN DBMS_OUTPUT.PUT_LINE(v_Salary); ELSE DBMS_OUTPUT.PUT_LINE('工资未定'); END IF; END;
    --语法3--
    IF 条件1 THEN 语句1; ELSIF 条件2 THEN 语句2; [ELSE 语句3;] END IF; DECLARE v_Salary NUMBER(8,2); v_Comment VARCHAR2(40); BEGIN SELECT salary INTO v_Salary FROM auths WHERE name='张三'; IF v_Salary = 120 THEN v_Comment:='最低工资'; ELSIF(v_Salary > 120) AND (v_Salary <= 300) THEN v_Comment:='低工资'; ELSE v_Comment:='普通工资'; END IF; END;

    2、循环控制语句

    --语法1--
    LOOP 语句;
    END LOOP; DECLARE v_name VARCHAR2(10); v_num INTEGER:=1; BEGIN LOOP SELECT name INTO v_name FROM auths WHERE author_code='A0000'||TO_CHAR(v_num); v_num:=v_num+1; IF v_num>=10 THEN EXIT; END IF; END LOOP; END; ||为oracle中的字符串连接符; EXIT语句可在LOOP语句中出现多次,但不可以在LOOP语句外使用; DECLARE v_name VARCHAR2(10); v_num INTEGER:=1; BEGIN LOOP SELECT name INTO v_name FROM auths WHERE author_code='A0000'||TO_CHAR(v_num); v_num:=v_num+1; EXIT WHEN v_num>=10; END LOOP; END;
    --语法2--
    <<标号名>> LOOP 语句; END LOOP[标号名]; 标号指用"<<"和">>"括起来的标识符,必须放在LOOP语句的开始,结尾可选放。 在嵌套的LOOP循环中,带标号的循环可以提高程序的可读性。同时,使用EXIT语句不仅可以终止当前的循环,还可以终止任意带标号的循环语句。 DECLARE ... BEGIN <<first_loop>> LOOP LOOP ... EXIT first_loop WHEN ...; END LOOP; END LOOP first_loop; END;
    --语法3--
    WHILE 条件 LOOP 语句; END LOOP; DECLARE v_name VARCHAR2(10); v_num INTEGER:=1; BEGIN WHILE v_num<10 LOOP SELECT name INTO v_name FROM auths WHERE author_code='A0000'||TO_CHAR(v_num); v_num:=v_num+1; END LOOP; END;
    --语法4--
    FOR 循环变量 IN [REVERSE] 初始值..结束值 LOOP 语句; END LOOP; DECLARE v_name VARCHAR2(10); BEGIN FOR v_num IN 1..9 LOOP SELECT name INTO v_name FROM auths WHERE author_code='A0000'||TO_CHAR(v_num); DBMS_OUTPUT.PUT_LINE(v_name); END LOOP; END; DECLARE v_name VARCHAR2(10); v_count NUMBER; BEGIN SELECT COUNT(name) INTO v_count FROM auths FOR v_num IN 1..v_count LOOP SELECT name INTO v_name FROM auths WHERE author_code='A0000'||TO_CHAR(v_num); DBMS_OUTPUT.PUT_LINE(v_name); END LOOP; END; 可以引用循环变量; 循环变量的初始值和结束值可以是数据、变量或表达式,但值必须是整数; 允许在执行时动态的指定循环变量的初始值和结束值; 循环变量仅在循环语句中有效,当退出循环时,循环变量无效; 因为循环变量被隐式地定义为局部变量,所有任何同名的全局变量都将被改变量覆盖,如果要引用全局变量,则必须使用标号和点好; 如果在嵌套的循环语句中,内层和外层的循环变量名相同,这时,要在内部循环中使用外部循环的循环变量,必须使用标号和点好;

    3、顺序控制语句

    GOTO语句是非结构化语句;
    NULL语句能够使条件语句的意义更加清晰,并且能够提高程序的可读性;
  • 相关阅读:
    SGU 106 The equation 扩展欧几里德
    poj 2478 Farey Sequence 欧拉函数前缀和
    uva 11752 The Super Powers 素数+大数判断大小
    Lightoj 1370 素数打表 +二分
    vijos 1250 最勇敢的机器人 分组背包+并查集
    Codeforces Round #366 (Div. 2) A , B , C 模拟 , 思路 ,queue
    BZOJ 4034: [HAOI2015]T2 树链剖分
    BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp
    BZOJ 1260: [CQOI2007]涂色paint 区间DP
    BZOJ 1264: [AHOI2006]基因匹配Match 树状数组+DP
  • 原文地址:https://www.cnblogs.com/hehaiyang/p/4744317.html
Copyright © 2020-2023  润新知