zoukankan      html  css  js  c++  java
  • 顺序语句:GOTO和NULL语句

    一 标号和GOTO

    1 语法:

    PL/SQL中GOTO语句是无条件跳转到指定的标号去的意思。语法如下:

    GOTO label;
    ......
    <<label>> /*标号是用<< >>括起来的标识符 */

    注意,在以下地方使用是不合法的,编译时会出错误。

    — 跳转到非执行语句前面。

    — 跳转到子块中。

    — 跳转到循环语句中。

    — 跳转到条件语句中。

    — 从异常处理部分跳转到执行。

    — 从条件语句的一部分跳转到另一部分。

     

    2 例子:

    DECLARE
       V_counter NUMBER := 1;
    BEGIN
       LOOP 
         DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);
         V_counter := v_counter + 1;
       IF v_counter > 10 THEN
           GOTO labelOffLOOP;
       END IF;
       END LOOP;
       <<labelOffLOOP>>
         DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);
    END;

     

    DECLARE
       v_i NUMBER := 0;
       v_s NUMBER := 0;
    BEGIN
       <<label_1>>
       v_i := v_i + 1;
       IF v_i <= 1000 THEN
          v_s := v_s + v_i;
          GOTO label_1;
       END IF;
       DBMS_OUTPUT.PUT_LINE(v_s);
    END;

     

    2 NULL语句

    在PL/SQL 程序中,NULL语句是一个可执行语句,可以用 null 语句来说明“不用做任何事情”的意思,相当于一个占位符或不执行任何操作的空语句,可以使某些语句变得有意义,提高程序的可读性,保证其他语句结构的完整性和正确性。如:

    DECLARE
        ...
    BEGIN
        ...
        IF v_num IS NULL THEN
        GOTO labelPrint;
        END IF;
      …
      <<labelPrint>>
      NULL; --不需要处理任何数据。
    END;

     

    DECLARE
       v_emp_id employees.employee_id%TYPE;
       v_first_name employees.first_name%TYPE;
       v_salary employees.salary%TYPE;
       v_sal_raise NUMBER(3,2);
    BEGIN
       v_emp_id := &emp_id;
       SELECT first_name, salary INTO v_first_name, v_salary
       FROM employees WHERE employee_id = v_emp_id;
       IF v_salary <= 3000 THEN
          v_sal_raise := .10;
          DBMS_OUTPUT.PUT_LINE(v_first_name||'的工资是'||v_salary
                                           ||'、工资涨幅是'||v_sal_raise);
       ELSE
          NULL;
       END IF;
    END;

  • 相关阅读:
    CVTE 一面
    【玩转Ubuntu】08. Linux报错:Syntax error: "(" unexpected解决办法
    Advanced Replication同步复制实验(基于Trigger&基于Materialized View)
    centos6.4-x86-64系统更新系统自带Apache Http Server
    针对某个表使用高级复制进行数据同步示例
    [置顶] What is the difference between Category and Class Extension?
    Boxes And Balls(三叉哈夫曼编码)
    xorequation(DFS完全枚举)
    Dreamoon and MRT(二元枚举)
    矩阵链乘(解析表达式)
  • 原文地址:https://www.cnblogs.com/rxhuiu/p/9109036.html
Copyright © 2011-2022 走看看