zoukankan      html  css  js  c++  java
  • PL/SQL编程基础

    1. PL/SQL块的基础结构

    DECLARE

    /*

    * 定义部分——定义常量、变量、复杂数据类型、游标、用户自定义异常

    */

    BEGIN

    /*

    * 执行部分——PL/SQL语句和SQL语句

    */

    EXCEPTION

    /*

    * 异常处理部分——处理运行错误

    */

    END;

     /*块结束标记 */

    2. 使用变量和常量

    1) PL/SQL 块中可以使用变量和常量
    a. 在声明部分声明,使用前必须先声明
    b. 声明时必须指定数据类型,每行声明一个标识符
    c. 在可执行部分的 SQL 语句和过程语句中使用
    2) 声明变量和常量的语法:

    identifier [CONSTANT] datatype [NOT NULL]  

      [:= | DEFAULT expr];

    3) 给变量赋值有两种方法:
    a. 使用赋值语句 :=
    b. 使用 SELECT INTO 语句
    例如:

    DECLARE

      v_name varchar2(10);

    BEGIN

      select dname  into v_name

      from dept

      where deptno = 90;

    dbms_output.put_line('dname:'|| v_name);

    EXCEPTION WHEN NO_DATA_FOUND THEN

        dbms_output.put_line('没有该部门');

    END;

    3. PL/SQL块的类型

    1) 匿名块
    前面各个示例执行的都是没有名称的匿名块。
    2) 子程序
    a. 过程:能够完成一系列的增删改查的动作的“方法”。
    示例:更新指定姓名员工工资,姓名不区别不大小写。

    create or replace procedure update_sal

    (p_ename VARCHAR2, p_newsal NUMBER)

    AS 

    BEGIN

       UPDATE emp SET sal = P_newsal

       WHERE lower(ename) = lower(P_ename);

       commit;

    END;

    调用:

    exec update_sal(‘scott’, 2000); --SQL*PLUS中的命令

    call update_sal(‘SCOTT’, 2000); --JAVA中调用的语句

    b. 函数:能够完成计算并返回计算结果,注意不能修改数据。
    示例:计算一个数的两倍后并返回。

    create or replace function f_add(a number )

    return number

    as

    begin

       return a*2;

    end;

    调用:

    select f_add(2) from dual;

    select f_add(deptno) from dept;

    c. 触发器:当触发器所监控的表的数据发生改变(增删改)时自动执行的代码块。
    d. 包:包用于逻辑“包含”相关的过程和函数,它由包头和包体两部分组成。
    示例:将前面的函数f_add定义在包中并调用。 

    create or replace package my_bao is

      function f_add(a number ) return number;

    end;

    /

    create or replace package body my_bao is

      function f_add(a number ) return number

      as

      begin

        return a*2;

      end;

    end;

    调用:select my_bao.f_add(2) from dual;

     4. 标量变量 
    1) 标量变量
    a. 标量变量是指只能存入单个数值的变量。
    b. 标量变量必须先定义后使用。
    2) 常用的标量类型
    a. VARCHAR2(n):该数据类型用于定义可变长度的字符串 ,n<=4000。
    b. CHAR(n):该数据类型用于定义固定长度的字符串,n<=2000。
    c. NUMBER(总位数, 小数位):定义整数或小数。
    d. DATE:该数据类型用于定义日期和时间数据。
    e. BOOLEAN:该数据用于定义布尔变量,其变量的值为TRUE、FALSE或NULL。 注意此类型只能在PL/SQL中使用,表列是没有此类型的。
    f. %type:通常用于指定表的某个列的数据类型,可以理解为“的类型”(小技巧:%读“的”)。
    示例:打印部门编号为10的部门名称。

    declare

       v_name dept.dname%type;

    begin

     select dept.dname into v_name

     from dept

     where deptno = 10;

     dbms_output.put_line('dept = '||v_name);

    end;

    运行结果:

    dept = ACCOUNTING

    5. 复合变量

    1) 复合变量
    a. 复合变量是指用于存放多个值的变量。
    b. 在使用复合变量时,必须先用TYPE进行定义“新的数据类型”,然后再用这些新的类型定义新的变量。
    2) 复合数据类型
    a. 记录类型:可以简单理解为具有多个“属性”的变量。

    DECLARE

    TYPE emp_record_type IS RECORD (

        name emp.ename%TYPE,

         salary emp.sal%TYPE);

    emp emp_record_type;

    BEGIN

      SELECT ename,sal,job into emp

      FROM emp WHERE empno=7788;

      dbms_output.put_line('雇员名:' || emp .name);

    END;

    b. 索引表类型
    PL/SQL索引表类似Collection接口,或者看成是一个1维数组也可以。
    不连续
    索引可为负数
    动态增长
    语法:type xx is table of 类型 index by 整型
    c. 嵌套表类型
    d. 变长数组类型
    e. 集合类型
    6. 引用变量
    1) 引用变量
    引用变量是指用于存放数据地址(指针)的变量。
    2) 好处
    通过使用引用变量,可以使得应用程序共享相同对象,从而降低占用空间。
    3) 引用变量类型
    a. REF CURSOR:引用游标类型
    先定义游标变量,再定义该游标使用的select语句。具体将在后面游标讲解更深入讲解。
    b. REF obj_type:引用对象类型
    编写对象类型应用时,为了共享相同对象,可以使用REF引用对象类型,REF实际是指向对象实例的指针。

    7. LOB变量

    1) LOB变量
    LOB变量是指用于存储大批量数据的变量。
    2) 分类
    a. 内部LOB:存储在数据库中,并且支持事务操作(提交、回退、保存点)。
    CLOB:存储大批量字符数据(指定字符集)
    NCLOB:存储大批量字符数据 (所有字符集)
    BLOB:存储大批量二进制数据
    b. 外部LOB:只有一种类型,该类型的数据被存储在操作系统文件中,并且不支持事务操作。
    BFILE:存储指向操作系统文件的指针

    8. 使用SQL*Plus绑定变量

    a. 当在SQL*Plus中与PL/SQL块之间进行数据交互时,需要使用SQL*Plus绑定变量来完成。
    b. 当在PL/SQL中引用非PL/SQL变量时,必须要在非PL/SQL变量前加冒号(“:”)。 

    SQL> var name varchar2(10);

    SQL> BEGIN

      2       SELECT ename INTO :name FROM emp

      3       WHERE empno = 7788;

      4    end;

    5  /

    SQL> print name;

    name

    ---------

    SCOTT

    9. PL/SQL词汇单元

    当编写PL/SQL块时,每个PL/SQL块都包含多行代码,而每行代码又是由多个合法单元组成的,这些合法单元被称为词汇单元。 

    1) PL/SQL词汇单元分类
    a. 标识符
    通过使用标识符,可以定义常量、变量、异常、显式游标、游标变量、参数、子程序以及包的名称。
    示例:declare v_name emp.ename%type;
    b. 字面量
    写在代码各种具体的数值,如数字、字符、字符串、日期值或布尔值 。
    示例: v_name := 'lovo';
    c. 分隔符
    分隔符是指具有特定含义的单个符号(+、-、*、/)或组合符号( := 、>=)。
    示例: a := 10 + 20 ;
    3) 注释
    a. 单行注释 --单行注释
    b. 多行注释 /*多行注释*/
    示例 

    DECLARE

      --定义v_sal变量

      v_sal NUMBER(6,2);

    BEGIN

      /*

       给变量赋值,

       然后打印此变量

      */

      v_sal := 1000;

      dbms_output.put_line(v_sal);

    END;

    10.PL/SQL代码编写规则

    1) 好处
    使用适当的编写规则,可以提高代码的可读性,降低程序维护难度。
    2) 规则
    A. 标识符命名规则
    a. v_变量名 定义变量
    b. e_变量名 定义异常
    c. …….
    B. 大小写规则
    代码不区别大小写,但建议关键字大写。
    C. 代码缩进
    D. 嵌套块和变量范围
    外部块能够访问内部块的变量,反之则不能。
  • 相关阅读:
    String与StringBuffer
    oracleSQL文
    中国IT成功人士特点6大成功密码全解析
    对java学习有帮助
    Spring之工厂模式
    搭建IBatis 框架
    单例模式(Singleton)
    UVa 10180 Rope Crisis in Ropeland!
    HDU 3711 Binary Number
    UVaLive 4643 / LA 4643 Twenty Questions(对题意的解释已修改)
  • 原文地址:https://www.cnblogs.com/lxh1197412986/p/4604794.html
Copyright © 2011-2022 走看看