`

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表  
     略。

分享到:
评论

相关推荐

    Oracle PL SQL程序设计 上 第五版(代码示例)

    《oracle pl/sql程序设计(第5版)》基于oracle数据库11g,从pl/sql编程、pl/sql程序结构、pl/sql程序数据、pl/sql中的sql、pl/sql应用构建、高级pl/sql主题6个方面详细系统地讨论了pl/sql以及如何有效地使用它。...

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何有效地使用它。...

    Oracle_PLSQL语言基础

    PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL...

    PL/SQL 用户指南与参考

    第四章 PL/SQL的控制结构 第五章 PL/SQL集合与记录 第六章 PL/SQL与Oracle间交互 第七章 控制PL/SQL错误 第八章 PL/SQL子程序 第九章 PL/SQL包 第十章 PL/SQL对象类型 第十一章 本地动态SQL 第十二章 PL/SQL...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二)

     第13章 编写控制结构  第14章 使用复合数据类型  第15章 使用游标  第16章 异常处理 . 第17章 本地动态sql  第18章 pl/sql过程  第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象...

    PL/SQL课件

    PL/SQL简介(第1~2章) PL/SQL中的SQL语句(第3章) 控制结构(第4~7章) 异常处理(第8~10章) 游标(第11~12章) 触发器(第13~14章) 复合数据类型(第15~16章) 动态SQL(第17章) 批量SQL(第18章) 子程序和包...

    14oracle的PL/SQL编程-控制结构 PPT

    14oracle的PL/SQL编程-控制结构 PPT 14oracle的PL/SQL编程-控制结构 PPT

    Oracle 11g SQL和PL SQL从入门到精通〖送源代码〗

    本书是专门为Oracle应用开发人员提供的SQL和PL/SQL编程指南。通过学习本书,读者不仅可以掌握Oracle常用工具Oracle Universal Installer、Net Comfiguration Assistant、SQL Developer、SQL*Plus的作用及使用方法,...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

     第13章 编写控制结构  第14章 使用复合数据类型  第15章 使用游标  第16章 异常处理 . 第17章 本地动态sql  第18章 pl/sql过程  第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象...

    PL/SQL Developer8.04官网程序_keygen_汉化

    控制结构 PL/SQL程序段中有三种程序结构:条件结构、循环结构和顺序结构。  1) 条件结构 与其它语言完全类似,语法结构如下: if condition thenstatement1elsestatement2end if ;  2) 循环结构 这一结构与其他...

    Oracle PL/SQL程序设计(第5版)(下册) 第一部分

    《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何有效地使用它。...

    Oracle PL/SQL语言初级教程

    控制结构 12 小结 17 2.PL/SQL的复合数据类型 17 使用记录 19 PL/SQL集合 23 嵌套表 24 使用集合 25 集合的方法 28 关于集合之间的比较 29 3.PL/SQL单行函数和组函数详解 29 单行字符串函数 30 单行转换函数 37 SQL...

    PL/SQL经典介绍

    第四章 PL-SQL的控制结构 第五章 PL-SQL集合与记录(1) 第六章 PL-SQL集合与记录(2) 第七章 PL-SQL与Oracle间交互 第八章 控制PL-SQL错误 第九章 PL-SQL子程序 第十章 PL-SQL包 第十一章 PL-SQL对象类型 第十二章...

    sql、pl/sql教程.rar

    SQL: 结构化查询语言(Structured Query ...PL/SQL: Oracle 扩展的SQL语言,具有完整的流程控制定义。 SQL*Plus: Oracle 常用的工具,用来识别SQL语言和编写、执行PL/SQL代码,它与Oracle 数据库管理系统紧密结合。

    oracle实验五 PL/SQL编程

    【实验目的】 1. 熟悉PL/SQL的数据类型和书写规则 2. 熟悉控制结构和游标的使用 3. 编写和运行函数、过程和触发器

    PLSQL基础word

    PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL...

    Oracle PL_SQL语言初级教程

    • Oracle PL/SQL语言基础(2) • Oracle PL/SQL语言基础(3) 复合数据类型 PL/SQL 有两种复合数据结构:记录和集合。记录由不同的域组成,集合由不同的元素组成。在本文中我 们将讨论记录和集合的类型、怎样定义和...

    pl/sql 开发详解

    从Oracle6开始,Oracle公司在标准SQL的基础上发展了自己的PL/SQL语言,将变量、控制结构、过程和函数等结构化程序设计的要素引入了SQL语言中,这样就能够编制比较复杂的SQL程序了,利用PL/SQL语言编写的程序也称为...

    ORACLE PL/SQL 基础教程及参考

    至于数据定义(DDL)和数据控制(DCL)命令的处理,需要通过Oracle提供的特殊的DMBS_SQL包来进行。PL/SQL还可以用来编写过程、函数、包及数据库触发器。过程和函数也称为子程序,在定义时要给出相应的过程名和函数名。...

Global site tag (gtag.js) - Google Analytics