zoukankan      html  css  js  c++  java
  • pl/sql 笔记之基础(上)

      由于公司中使用 oracle,而本人对存储过程一直也懵懵懂懂,故一周时间学习了一遍 pl/sql,在此记下笔记!!!

    一、前提,pl/sql 是啥?
    1、PL/SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。
    2、由于该语言集成于数据库服务器中, 所以PL/SQL代码可以对数据进行快速高效的处理。
    3、PL/SQL 是 ORACLE 系统的核心语言,现在 ORACLE 的许多部件都是由 PL/SQL 写成。
    4、在 PL/SQL 中只能用 SQL 语句中的 DML 部分,不能用 DDL 部分,如果要在 PL/SQL 中使用 DDL(如CREATE table 等)的话,只能以动态的方式来使用。
     
    二、pl/sql 基本语法
    1、pl/sql 块
    ① PL/SQL 程序由三个块组成,即声明部分、执行部分、异常处理部分。结构如下(像极了java方法啊 ):
     
    DECLARE
    /* 声明部分: 在此声明 PL/SQL 用到的变量,类型及游标,以及局部的存储过程和函数 */
    BEGIN
    /* 执行部分: 过程及 SQL 语句 , 即程序的主要部分 */
    EXCEPTION
    /* 执行异常部分: 错误处理 */
    END;
    ② 一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果
     
    2、变量类型: 基本变量类型、复合类型(记录、表)
    ① 记录类型: 存放互不相同但逻辑相关的信息。(好像C语言的结构体啊)
    -- 声明记录类型
    TYPE record_type_test IS RECORD (
    v_name employees.last_name%TYPE,
    salary NUMBER
    );
    -- 定义记录类型变量
    v_record_type_test record_type_test;
     
    -- %ROWTYPE 操作符, 返回一个记录类型, 我理解为表的一行
    v_emp employees%ROWTYPE;
    ② 表类型: 用来记录一张表的好多行
    3、流程控制

    4、 游标:
    游标是一个指向上下文的句柄( handle)或指针。在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现。
      问:什么时候用这么麻烦的显示游标?
      答:SELECT INTO、INSERT、UPDATE、DELETE 均用隐式游标。
        显示游标用于专门处理select语句返回多行数据。
     
    4.1、显式游标
    4.11 步骤: 定义游标、打开游标、提取游标数据、关闭游标
    eg : 查询前 10 名员工的信息。
    4.12、显式游标属性
     
    %FOUND 布尔型属性,当最近一次读记录时成功返回,则值为 TRUE;
    %NOTFOUND 布尔型属性,与%FOUND 相反;
    %ISOPEN 布尔型属性,当游标已打开时返回 TRUE;
    %ROWCOUNT 数字型属性,返回已从游标中读取的记录数。
     
    4.13、游标for 循环
      游标 FOR 循环语句,自动执行游标的 OPEN、 FETCH、 CLOSE 语句和循环语句的功能;当进入循环时,游标 FOR 循环语句自动打开游标,并提取第一行游标数据,当程序处理完当前所提取的数据而进入下一次循环时,游标 FOR 循环语句自动提取下一行数据供程序处理,当提取完结果集合中的所有数据行后结束循环,并自动关闭游标。
    4.2、隐式游标
    对于单条select、INSERT、UPDATE、DELETE 操作, 则由 ORACLE 系统自动地为这些操作设置游标并创建其工作区,这些由系统隐含创建的游标称为隐式游标。
     
    4.2.1、隐式游标属性
    SQL%FOUND 布尔型属性,当最近一次读记录时成功返回,则值为 TRUE;
    SQL%NOTFOUND 布尔型属性,与%FOUND 相反;
    SQL %ROWCOUNT 数字型属性, 返回已从游标中读取得记录数;
    SQL %ISOPEN 布尔型属性, 取值总是 FALSE。 SQL 命令执行完毕立即关闭隐式游标。
     
    4.2.2、 eg、删除指定员工

    注意:
    1、如果游标打开之前或关闭之后,使用游标属性,Oracle会抛出一个INVALID_CURSOR错误(ORA-01001);
    2、如果在第一次fetch后结果集是空的,%found=false,%NotFound=true,%ROWCOUNT=0;
    3、如果使用了BULK COLLECT,那么%ROWCOUNT的值可能不是0或1,实际上他返回的是提取到相关集合的行数。
    4、游标修改和删除操作是指在游标定位下,修改或删除表中指定的数据行。这时, 要求游标查询语句中必须使用 FOR UPDATE 选项,来对所选择的行进行锁住。用法:
    5、SELECT … INTO 语句触发 NO_DATA_FOUND;
      当 UPDATE 或 DELETE 或显式游标语句的 WHERE 子句未找到时触发 SQL%NOTFOUND;
     
    三、异常处理
    pl/sql 有三种类型的异常错误:
     
    1. 预定义 ( Predefined )错误
    ORACLE 预定义的异常情况大约有 24 个。对这种异常情况的处理,无需在程序中定义, 由 ORACLE 自动将其引发。
     
    2. 非预定义 ( Predefined )错误
    即其他标准的 ORACLE 错误。对这种异常情况的处理,需要用户在程序中定义,然后由 ORACLE 自动将其引发。

    eg、

    3. 用户自定义(User_define) 错误
    程序执行过程中,出现编程人员认为的非正常情况。对这种异常情况的处理, 需要用户在程序中定义,然后显式地在程序中将其引发。
    eg:

  • 相关阅读:
    CLR(Common Language Runtime)
    六个经典的英语面试问题
    XML基本知识(三)
    vc++中各种字符串(转载)
    winform窗体间传值
    jQuery实现按比例缩放图片
    .net中几个名词解释
    XML Schema 定义
    C#中TreeView组件使用方法初步
    微软电话面试题
  • 原文地址:https://www.cnblogs.com/skillking/p/6759041.html
Copyright © 2011-2022 走看看