`

Oracle_PL_ SQL_ 教程:控制语句(条件语句、循环语句)

 
阅读更多
--######################################--
--控制语句(条件语句、循环语句)
--王林 2012.07.06
--######################################--

--between 包含边界值
--**指数运算
--单变量表达式返回true、false或null。当评估某个表达式是否为true时,false和null都是not true
--同样,当评估某个表达式是否为false时,true和null都是not false。null表达式不是true也不是false。

--######################################--
--1.IF语句
--所有语句块至少需要一条语句。
--ELSIF 不能写成 ELSEIF。
--布尔变量可以取代比较运算,返回布尔数据类型的单个函数也可以。

--(1)if-then-else语句 单分支语句

--Demo1:
BEGIN
    --比较语句外的括号不是必需的
    IF 1 = 1 THEN
        DBMS_OUTPUT.put_line( 'Condition met!' );
    --没有else块的if语句只在条件满足时执行代码
    END IF;
END;

--Demo2:
DECLARE
    equal BOOLEAN NOT NULL := TRUE;
BEGIN
    --如果评估变量或返回null值的表达式,运行时可能产生null,应用nvl避免
    IF equal THEN
        DBMS_OUTPUT.put_line( 'Condition met!' );
    END IF;
END;

--Demo3:
BEGIN
    IF 1 = 2 THEN
        DBMS_OUTPUT.put_line( 'Condition met!' );
    ELSE 
        DBMS_OUTPUT.put_line( 'Condition not met!' );
    END IF;
END;

--(2)if-then-elsif-then-else 语句

--Demo4:
DECLARE
    equal BOOLEAN NOT NULL := TRUE;
BEGIN
    --在判定第一个条件为true后退出,当没有条件满足时,运行默认的else条件
    IF 1 = 1 THEN
        DBMS_OUTPUT.put_line( 'Condition 1 met!' );
    ELSIF equal THEN
        DBMS_OUTPUT.put_line( 'Condition 2 met!' );
    ELSIF 1 =2 THEN
        DBMS_OUTPUT.put_line( 'Condition 3 met!' );
    END IF;
END; 

--######################################--
--2.CASE语句
--不可以省去else块,否则在未发现选择符时会引发CASE_NOT_FOUND或PLS-06592错误
--简单CASE语句的选择符是使用(或返回)有效数据类型(布尔类型除外)的变量或函数。
--搜索CASE语句选择符是布尔变量或返回布尔变量的函数,默认选择true

--(1)简单CASE语句
--在整个结构中,选择变量的值同表达式的值进行顺序匹配,如果相等,则执行相应的语句序列,如果不等,则执行ELSE部分的语句序列。

--Demo5:
DECLARE 
    --选择符可以是除BLOB,BFILE外的任何PL/SQL数据类型或复合类型
    selector NUMBER := 0;
BEGIN
    CASE selector
        --WHEN块越多,有效性越低
        WHEN 0 THEN
            --CASE语句停止评估并在退出该语句前运行匹配的WHEN块
            DBMS_OUTPUT.put_line( 'Case 0!' );
        WHEN 1 THEN
            DBMS_OUTPUT.put_line( 'Case 1!' );
        ELSE
            DBMS_OUTPUT.put_line( 'No match' );
    END CASE;--END 后面有CASE
END;

--(2)表达式结构CASE语句
--CASE结构还能以赋值表达式的形式出现,它根据选择变量的值求得不同的结果。

--Demo6:
--说明:该CASE表达式通过判断变量selector的值,对变量v_result赋予不同的值。
DECLARE 
    selector NUMBER := 1;
    v_result VARCHAR2 (20);
BEGIN
    v_result:=
    CASE selector
        WHEN 1 THEN
            'First'
        WHEN 2 THEN
            'Second'
        ELSE
            'NO'
    END;
    DBMS_OUTPUT.PUT_LINE('The result is:'||v_result);
END;

--(3)CASE搜索语句
--它没有选择变量,直接判断条件表达式的值,根据条件表达式决定转向。
--除非想要搜索false条件,否则CASE搜索语句的选择符是隐式设置的TRUE;

--Demo7:
--说明:此结构类似于IF-THEN-ELSIF-ELSE-END IF结构。
BEGIN 
    CASE /*FALSE | TRUE*/
        WHEN 1 = 2 THEN
            DBMS_OUTPUT.put_line( '[ 1 = 2]!' );
        WHEN 2 =2 THEN
            DBMS_OUTPUT.put_line( '[ 2 = 2]!' );
        ELSE
            DBMS_OUTPUT.put_line( 'No match' );
    END CASE;
END;

--######################################--
--3.Exit When循环:
--EXIT用于在循环过程中退出循环,WHEN用于定义EXIT的退出条件。如果没有WHEN条件,遇到EXIT语句则无条件退出循环。

--Demo8:
DECLARE
    i NUMBER;
BEGIN 
    i := 0;
    LOOP
       EXIT WHEN( i > 5 );
       DBMS_OUTPUT.put_line(i);
       i := i + 1;
    END LOOP;
END;

--######################################--
--4.Loop循环:

--Demo9:
DECLARE
    i NUMBER;
BEGIN 
    i := 0;
    LOOP 
        i := i + 1;
        DBMS_OUTPUT.put_line(i);
        IF i > 5 THEN 
           EXIT;
        END IF;
   END LOOP;
END;

--######################################--
--5.WHILE LOOP循环:
--WHILE循环是有条件循环
--当条件满足时,执行循环体;当条件不满足时,则结束循环。如果第一次判断条件为假,则不执行循环体。

--Demo10:
DECLARE
    i NUMBER;
BEGIN 
    i:=0;
    WHILE i < 5 LOOP 
        i := i + 1;
        DBMS_OUTPUT.put_line(i);
    END LOOP;
END;

--######################################--
--6.FOR普通循环:
--是固定次数循环。
--循环控制变量是隐含定义的,不需要声明。
--下限和上限用于指明循环次数。正常情况下循环控制变量的取值由下限到上限递增,REVERSE关键字表示循环控制变量的取值由上限到下限递减。
--跟在IN REVERSE后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。
--可以使用EXIT退出循环。

--Demo11:
DECLARE
    i NUMBER;
BEGIN 
    i := 0;
    FOR i IN 1..5 LOOP
        DBMS_OUTPUT.put_line(i);
    END LOOP;
END;

--Demo12:
--效果同Demo11一样
BEGIN 
    FOR i IN 1..5 LOOP
        DBMS_OUTPUT.put_line(i);
    END LOOP;
END;

--Demo13:
--REVERSE倒置计数 
BEGIN 
    FOR i IN REVERSE 1..5 LOOP
        DBMS_OUTPUT.put_line(i);
    END LOOP;
END;

--######################################--
--7.For游标循环:

--Demo14:
DECLARE 
    userRow scott.emp%ROWTYPE;
    CURSOR userRows 
    IS 
        SELECT * FROM scott.emp;
BEGIN 
    FOR userRow IN userRows LOOP 
        DBMS_OUTPUT.put_line(userRow.ename||','||userRow.empno||','||userRows%ROWCOUNT);
    END LOOP;
END;

 

分享到:
评论

相关推荐

    Oracle_PL-SQL.rar_ORACLE PL_oracle_oracle sql_oracle 教程_pl sql

    2. **控制结构**:PL/SQL中的控制结构包括条件语句(IF-THEN-ELSIF-ELSE)、循环语句(WHILE、FOR)、CASE表达式等,它们用于根据特定条件执行不同的代码块。 3. **异常处理**:Oracle PL/SQL有内置的异常处理机制...

    Oracle_PLSQL.rar_Java plsql_oracle_oracle doc_pl sql_plsql

    - **嵌入式SQL**:PL/SQL可以直接嵌入SQL语句,用于查询、插入、更新和删除数据库中的数据。 - **动态SQL**:通过EXECUTE IMMEDIATE语句执行字符串形式的SQL,适应更灵活的需求。 3. **PL/SQL控制结构** - **...

    OraclePL-SQL.rar_ORACLE PL_oracle_oracle sql

    5. **PL/SQL控制结构**:包括IF-THEN-ELSIF-ELSE、CASE语句进行条件判断,WHILE、FOR循环实现迭代,LOOP结构进行无限循环或指定次数的循环,以及EXIT和GOTO语句进行流程控制。 6. **游标**:游标用于逐行处理查询...

    Oracle2BPL-SQL.rar_oracle_pl/sql

    Oracle2BPL-SQL.rar_oracle_pl/sql这个压缩包文件可能包含了关于Oracle PL/SQL的基础教程资料,其中的Oracle2BPL-SQL.pdf可能是详细的讲解文本。 Oracle PL/SQL由三部分组成:Procedural Language(过程语言)、...

    oracle_oracle_oraclepl/sql_

    3. **流程控制**:PL/SQL提供了IF-THEN-ELSIF-ELSE、CASE语句进行条件判断,以及WHILE、FOR循环结构来实现迭代操作。 4. **块结构**:PL/SQL代码组织在块(BLOCK)中,包括声明部分(DECLARATION)、执行部分...

    PLSQL.rar_oracle_pl sql_plsql_plsql java_sql

    描述中提到“Oracle,PL/SQL操作手册,主要介绍语法等”,意味着这份资料可能详尽地涵盖了PLSQL的基本语法、数据类型、变量声明、控制结构(如IF-THEN-ELSE、CASE语句)、循环(WHILE、FOR循环)、子程序(过程和函数...

    pl_sql基本语法例子.rar_SQL2569_oracle_pl/sql_plsql增删改查

    - 条件语句:IF-THEN-ELSIF-ELSE,用于根据条件执行不同代码块。 - 循环结构:WHILE循环和FOR循环,用于重复执行一段代码直到满足特定条件。 - CASE表达式:类似于IF-THEN-ELSIF的简洁形式,根据不同的情况执行...

    ORACLE8 PLSQL程序设计_sql_code.zip_oracle pl/sql_pl sql code_pl/sql_

    8. **EXAMP**: 06-EXAMP.SQL、10-EXAMP.SQL以及04-LOOP.SQL可能包含各种PL/SQL编程示例,如控制结构(如循环、条件语句)、异常处理和数据类型使用等。 9. **LOOP**: 04-LOOP.SQL专门涉及PL/SQL中的循环结构,包括...

    PLSQL.zip_oracl_oracle pl/sql ppt_pl sql ppt tutorial_pl/sql_pls

    3. **控制结构**:PL/SQL支持多种控制流程结构,如IF-THEN-ELSE、CASE、WHILE、FOR循环等,使得程序可以根据条件执行不同的代码路径。 4. **子程序**:PL/SQL支持函数和过程的创建,它们可以封装一系列的操作并在...

    ORACLE_PL_SQL实战精讲

    执行部分包含SQL语句和PL/SQL控制结构;异常处理部分则用来捕获和处理运行时错误。理解这些基本结构对于编写健壮的PL/SQL代码至关重要。 本书将详细讲解以下PL/SQL的核心概念和技巧: 1. **变量和数据类型**:涵盖...

    oracle10g_pl/sql

    - **存储过程**:一组PL/SQL语句,可重复调用,提高代码复用性。 - **函数**:类似于过程,但返回一个值,可用于计算或验证。 - **触发器**:在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/...

    精通Oracle_10g_Pl_SQL编程(上下册)

    1. **PL/SQL语法基础**:介绍如何声明变量、常量,定义过程、函数,以及使用条件语句(如IF-THEN-ELSIF-ELSE)和循环结构(如WHILE,FOR)。 2. **PL/SQL块结构**:包括匿名块(Anonymous Block)、存储过程...

    Oracle_PL/SQL编程

    ):这是PL/SQL的主要部分,包含一系列的SQL语句和流程控制结构,如IF-THEN-ELSIF,WHILE,FOR循环等。 3. 异常处理部分(EXCEPTION):处理程序运行过程中可能出现的错误和异常,确保程序的健壮性。 4. 注释:PL/...

    Oracle10_PL/SQL培训教程

    2. **流程控制**:讲解如何使用条件语句(IF-THEN-ELSIF, CASE)和循环语句(WHILE, FOR)控制程序的执行流程。 3. **子程序**:包括函数和过程的定义与调用,以及如何返回值。 4. **游标**:游标是PL/SQL中处理...

    PL-SQL.rar_pl_pl/sql

    3. **SQL语句的嵌入**:PL/SQL允许在程序块中嵌入SQL语句,如SELECT、INSERT、UPDATE、DELETE等,用于对数据库进行操作。 4. **控制流程语句**:包括IF-THEN-ELSIF-ELSE、CASE、FOR循环、WHILE循环等,用于控制程序...

    PL-SQL.rar_pl sql_pl sql 操作_存储过程

    它们可以包含参数,进行复杂的逻辑控制,执行一系列SQL语句,并返回结果。创建存储过程使用CREATE PROCEDURE语句,调用时则通过EXECUTE或CALL命令。存储过程有多种优点,如提高性能、减少网络流量、增强安全性、封装...

    PL_SQL_Oracle基础教程

    ### PL/SQL Oracle基础教程知识点概述 #### 一、基本的SQL SELECT语句 - **基本语法结构**:`SELECT`语句用于从数据库中选取数据。它是最常用的`SQL`语句。 - `SELECT * FROM tablename;`:选择表格中的所有列。 ...

    oracle-plsql.zip_oracle_pl sql 分组查询_plsql_plsql 分组查询

    14. **事务管理**:事务是一组SQL语句,被视为数据库操作的一个单元,必须全部成功或全部失败。ACID属性(原子性、一致性、隔离性和持久性)确保了事务的可靠性和一致性。 15. **用户管理**:包括创建、删除、修改...

    Oracle数据库SQL和PL/SQL实例教程

    3. **流程控制**:包括条件语句(IF...ELSIF...ELSE)和循环结构(WHILE、FOR、LOOP)。 4. **游标**:用于在结果集上迭代,常用于处理复杂的查询结果。 5. **异常处理**:通过BEGIN...EXCEPTION块来捕获和处理...

    pl_sql.zip_fetch_pl/sql_pl_sql_plsql_plsql java

    PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库提供的一个结合了SQL语句和过程式编程语言的编程环境。它主要用于管理和控制Oracle数据库,是Oracle数据库开发的核心工具之一。PL/SQL...

Global site tag (gtag.js) - Google Analytics