`

PL/SQL(oracle)2_控制结构

阅读更多

控制结构
一、分支结构
1、if
   注意:elsif 和else If

if(条件)then
    ... ...
elsif
    ... ...
end if ; 

2、case
   注意:
   case语句中的条件选择器可以省略,when后面既可以是一个具体的值,也可以是一个或多个
   条件表达式。
   case语句可以返回一个值,这是和java中的switch区别的。

用法:

 

CASE 语句

CASE selector
   WHEN value1 THEN action1;
   WHEN value2 THEN action2;
   WHEN value3 THEN action3;
   …..
   ELSE actionN;
END CASE; 

CASE表达式

DECLARE
    temp VARCHAR2(10);
    v_num number;
BEGIN
    v_num := &i;
    temp := CASE v_num
        WHEN 0 THEN 'Zero'
        WHEN 1 THEN 'One'
        WHEN 2 THEN 'Two'
    ELSE
        NULL
   END;
   dbms_output.put_line('v_num = '||temp);
END;
/ 

CASE搜索语句

CASE
    WHEN (boolean_condition1) THEN action1;
    WHEN (boolean_condition2) THEN action2;
    WHEN (boolean_condition3) THEN action3;
    ……
    ELSE    actionN;
END CASE; 

CASE搜索表达式

DECLARE
    a number := 20;
    b number := -40;
    tmp varchar2(50);
BEGIN
    tmp := CASE
        WHEN (a>b) THEN 'A is greater than B'
        WHEN (a<b) THEN 'A is less than B'
        ELSE  'A is equal to B'
        END;
    dbms_output.put_line(tmp);
END;
/ 

SELECT CASE WHEN 的用法
select 与 case结合使用最大的好处有两点,一是在显示查询结果时可以灵活的组织格式,二是有效避免了多次对同一个表或几个表的访问。下面举个简单的例子来说明。 例如表 students(id, name ,birthday, sex, grade),要求按每个年级统计男生和女生的数量各是多少,统计结果的表头为,年级,男生数量,女生数量。如果不用select case when,为了将男女数量并列显示,统计起来非常麻烦,先确定年级信息,再根据年级取男生数和女生数,而且很容易出错。用select case when写法如下:

SELECT   grade, COUNT (CASE WHEN sex = 1 THEN 1      /*sex 1为男生,2位女生*/
                                            ELSE NULL
                                            END) 男生数,
                            COUNT (CASE WHEN sex = 2 THEN 1
                                            ELSE NULL
                                            END) 女生数
    FROM students GROUP BY grade;

 

二、循环结构
1、基本循环:无条件的循环
   语法:
   Loop
       循环体;
   End Loop;
   注意:循环体中不要忘记添加退出循环的语句。使用exit 关键字进行循环的退出

loop
    ....
    --用于退出循环
    if(条件)then
        exit ;
    end if ;
    ....
end loop ;

2、有计数的循环(For循环)
   语法:
   For 计数器 In [Reverse] 循环下限..循环上限 Loop
       循环体;
   End Loop;
   注意:计数器是一个不需要事先声明的整型变量,每次循环之后自动增1或者减1。

DECLARE
    --在此处定义变量
BEGIN
    FOR i IN 1..10 LOOP
        dbms_output.put_line(i) ;
    END LOOP ;
END ;

3、有条件的循环(while)                                                 
   语法:
   While 条件 Loop
        循环体;
   End Loop;

DECLARE
    v_no NUMBER ;
BEGIN
    v_no := 0 ;
    WHILE v_no<10 LOOP
        dbms_output.put_line(v_no) ;
        v_no := v_no+1 ;
    END LOOP ;
END ;

4、循环嵌套和标签  
                       
复合数据类型 
一、复合数据类型的概念
    内部可以再有分量的数据类型叫做复合数据类型。此种数据类型不是Oracle自动提供的。   
二、复合变量   
     和创建不同的变量形式相同。
     变量名 数据类型名;
三、复合数据类型种类
1、记录型
   记录数据类型相当于类,该类型里面的分量名相当于属性名
   记录型变量相当于类的一个实例(对象)
   语法:
   a、创建数据类型
   在decalre部分使用如下语法:
   Type 记录型名字 Is Record (分量名列表);
   其中分量名列表格式为:变量名 数据类型 [Not Null][Default][初始值]
   b、创建该类型的变量
   在declare部分使用如下语法:
   变量名 记录型名字
   c、记录型变量的引用。
    如果想引用变量中的某一个分量,可以直接写 变量名.分量名
    如果想引用整个变量,就直接写变量名
   
    当使用Select为记录型变量赋值时,要注意Select后面的列名列表一定要和into后面的记录型
    变量中的分量列表在个数和数据类型上保持一致。
    案例:

declare
       type emp_record_type is Record
        ( v_empno emp.empno%type,v_ename emp.ename%type,v_sal emp.sal%type); --创建记录数据类型
       emp_record emp_record_type;--创建记录型变量
    begin
     select empno,ename,sal into emp_record from emp where empno = 7788;--为记录型变量赋值
     dbms_output.put_line(emp_record.v_empno || emp_record.v_ename || emp_record.v_sal);
     --打印出记录型每一个分量
     end;

     练习:使用记录型变量显示在部门20中工资最低的员工姓名及部门名称。

Declare
            Type emp_record_type Is Record (v_ename emp.ename%Type,v_dname dept.dname%Type);
            emp_record emp_record_type;
     Begin
            Select ename,dname Into emp_record From emp ,dept
              Where emp.deptno = dept.deptno
                     And  emp.deptno = 20
                            And sal = (Select Min(sal) From emp Where deptno = 20);
            dbms_output.put_line(emp_record.v_ename || emp_record.v_dname);
      End;                                

      记录类型的有效范围只在当前块中。
2、一种简便创建记录型变量的方式:%rowtype,使用该属性不用事先声明记录类型了,%前面允许写表名、视图名、游标名。

declare
       emp_record emp%Rowtype;--创建记录型变量
    begin
     select * into emp_record from emp where empno = 7788;--为记录型变量赋值
     dbms_output.put_line(emp_record.empno || emp_record.ename || emp_record.sal);
     --打印出记录型每一个分量
     end;

3、PL/SQL表  
     略。

分享到:
评论

相关推荐

    PL/Sql_Demo_Oracle

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和应用程序开发设计。"PL/Sql_Demo_Oracle"标题表明这是一个关于PL/SQL在Oracle环境下的示例集合,可能包含...

    pl_sql.zip_fetch_pl/sql_pl_sql_plsql_plsql java

    PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库提供的一个结合了SQL语句和过程式编程语言的编程环境。它主要用于管理和控制Oracle数据库,是Oracle数据库开发的核心工具之一。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支持函数和过程的创建,它们可以封装一系列的操作并在...

    oracle10g_pl/sql

    Oracle 10g PL/SQL 是Oracle数据库系统中用于创建和管理存储过程、函数、触发器等数据库对象的编程语言。本教程旨在为初学者提供一个全面的学习平台,同时也为经验丰富的开发者提供参考资料。PL/SQL是Oracle特有的...

    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中的循环结构,包括...

    Oracle PL/SQL实战(待续)

    在Oracle数据库中,PL/SQL提供了丰富的控制结构,如循环、条件判断,以及异常处理机制,使得开发者能够编写复杂的业务逻辑。例如,`IF...THEN...ELSIF...ELSE`语句用于实现条件分支,`WHILE`和`FOR`循环则可以处理...

    oracle_oracle_oraclepl/sql_

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作能力和过程性编程语言的控制结构。在"Oracle PL/SQL"这本书中,作者深入浅出地探讨了这一语言的核心概念和实用技巧,尤其适合法语...

    Oracle资料学习PL/SQL必备

    PL/SQL(Procedural Language/Structured Query Language)是Oracle专为数据库操作设计的一种过程化编程语言,结合了SQL的强大查询功能与高级编程语言的控制结构,使得数据库管理员和开发人员能够更高效、安全地管理...

    oracle 9i pl/sql程序设计笔记

    通过上述对Oracle 9i PL/SQL程序设计笔记的总结,我们可以看到PL/SQL作为一种强大的数据库编程语言,提供了丰富的功能来支持数据处理、事务控制及业务逻辑的实现。掌握PL/SQL的不同块类型及其使用方法对于开发高效、...

    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有内置的异常处理机制...

    一个对数据库的操作工具PL/SQLpl/sqL工具

    1. **编程能力**:PL/SQL允许编写包含控制结构(如循环、条件语句)和异常处理的程序块,这些块可以存储在数据库中并按需调用,提高了数据库应用的灵活性和复杂性。 2. **数据处理**:通过PL/SQL,用户可以直接对...

    oracle pl/sql从入门到精通 配套源代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作功能与PL/SQL的程序设计特性,广泛应用于Oracle数据库的开发和管理。这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了...

    pl/sql最新中文手册

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种过程化语言,专为数据库操作设计。这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册...

    Oracle PL/SQL程序设计(第5版)(上下册)

    ### Oracle PL/SQL程序设计(第5版)(上下册)知识点概述 #### 一、PL/SQL编程基础 - **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL...

    pl sql web design.rar_oracle_pl sql_pl/sql_web sql

    1. **Oracle PL/SQL基础**:PL/SQL是Procedural Language/Structured Query Language的缩写,它是Oracle为SQL添加的编程组件,支持流程控制、异常处理和子程序定义。在构建网上商店时,我们可能需要编写存储过程、...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    3. **控制结构**:PL/PROCEDURE和PL/FUNCTION是PL/SQL的基本程序单元,前者不返回值,后者可以返回一个值。流程控制结构有IF-THEN-ELSIF-ELSE、CASE、FOR循环、WHILE循环和GOTO。 4. **SQL操作**:PL/SQL可以直接...

    Oracle Database 12c PL/SQL开发指南 实例源代码

    1. **PL/SQL基础**:PL/SQL的基础语法,如变量声明、数据类型、流程控制语句(如IF-THEN-ELSIF,FOR循环,WHILE循环)、异常处理(BEGIN-EXCEPTION-END结构)等。 2. **函数与过程**:如何定义和调用用户自定义的...

    Oracle PL/SQL 实例精解(第4版涵盖Oracle 11g)+源码脚本

    Oracle PL/SQL是一种强大的编程语言,它将关系数据库的强大功能与结构化编程的优点结合在一起,是Oracle数据库系统中不可或缺的一部分。在"Oracle PL/SQL 实例精解(第4版涵盖Oracle 11g)+源码脚本"中,读者可以深入...

    Oracle PL/SQL学习官方教材

    2. **流程控制**:PL/SQL提供了多种流程控制结构,如条件语句(IF-THEN-ELSIF-ELSE)、循环(WHILE、FOR、LOOP)、CASE表达式,以及异常处理(EXCEPTION)。这些结构使得程序可以根据不同条件执行不同的代码段。 3....

    OraclePL-SQL.rar_ORACLE PL_oracle_oracle sql

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

Global site tag (gtag.js) - Google Analytics