• Oracle PL/SQL 语言(Procedural Language/SQL)


    Oracle PL/SQL 语言(Procedural Language/SQL)是结合了结构化
    查询与 Oracle 自身过程控制为一体的强大语言,PL/SQL 不但支持更多的数据类型,拥有自
    身的变量声明、赋值语句,而且还有条件、循环等流程控制语句。过程控制结构与 SQL 数
    据处理能力无缝的结合形成了强大的编程语言,可以创建过程和函数以及程序包。
    PL/SQL 是一种块结构的语言,它将一组语句放在一个块中,一次性发送给服务器, PL/SQL
    引擎分析收到 PL/SQL 语句块中的内容,把其中的过程控制语句由 PL/SQL 引擎自身去执行,
    把 PL/SQL 块中的 SQL 语句交给服务器的 SQL 语句执行器执行。
    PL/SQL 块发送给服务器后,先被编译然后执行,对于有名称的 PL/SQL 块(如子程序)
    可以单独编译,永久的存储在数据库中,随时准备执行。PL/SQL 的优点还有:
    Ø  支持 SQL
    SQL 是访问数据库的标准语言,通过 SQL 命令,用户可以操纵数据库中的数据。PL/SQL
    支持所有的 SQL 数据操纵命令、游标控制命令、事务控制命令、SQL 函数、运算符和伪列。
    同时 PL/SQL 和 SQL 语言紧密集成,PL/SQL 支持所有的 SQL 数据类型和 NULL 值。
    Ø  支持面向对象编程
    PL/SQL 支持面向对象的编程,在 PL/SQL 中可以创建类型,可以对类型进行继承,可以
    在子程序中重载方法等。
    Ø  更好的性能
    SQL 是非过程语言,只能一条一条执行,而 PL/SQL 把一个 PL/SQL 块统一进行编译后执
    行,同时还可以把编译好的 PL/SQL 块存储起来,以备重用,减少了应用程序和服务器之间
    的通信时间,PL/SQL 是快速而高效的。
    Ø  可移植性
    使用 PL/SQL 编写的应用程序,可以移植到任何操作系统平台上的 Oracle 服务器,同时
    还可以编写可移植程序库,在不同环境中重用。
    Ø  安全性
    可以通过存储过程对客户机和服务器之间的应用程序逻辑进行分隔,这样可以限制对
    Oracle 数据库的访问,数据库还可以授权和撤销其他用户访问的能力。
    2.  PL/SQL 块
    PL/SQL 是一种块结构的语言,一个 PL/SQL 程序包含了一个或者多个逻辑块,逻辑块中
    可以声明变量,变量在使用之前必须先声明。除了正常的执行程序外,PL/SQL 还提供了专
    门的异常处理部分进行异常处理。每个逻辑块分为三个部分,语法是:
    语法结构:PL/SQL 块的语法
    [DECLARE
    --declaration statements]   ①
    BEGIN
    --executable statements   ②
    [EXCEPTION
    --exception statements]   ③
    END;
    语法解析:
    ①  声明部分:声明部分包含了变量和常量的定义。这个部分由关键字 DECLARE 开始,
    如果不声明变量或者常量,可以省略这部分。
    ②  执行部分:执行部分是  PL/SQL 块的指令部分,由关键字 BEGIN 开始,关键字 END
    结尾。所有的可执行 PL/SQL 语句都放在这一部分,该部分执行命令并操作变量。
    其他的 PL/SQL 块可以作为子块嵌套在该部分。PL/SQL 块的执行部分是必选的。注
    意 END 关键字后面用分号结尾。
    ③  异常处理部分:该部分是可选的,该部分用 EXCEPTION 关键字把可执行部分分成两
    个小部分,之前的程序是正常运行的程序,一旦出现异常就跳转到异常部分执行。
    PL/SQL 是一种编程语言,与 Java 和 C#一样,除了有自身独有的数据类型、变量声明和赋
    值以及流程控制语句外,PL/SQL 还有自身的语言特性:
    PL/SQL 对大小写不敏感,为了良好的程序风格,开发团队都会选择一个合适的编码标准。
    比如有的团队规定:关键字全部大些,其余的部分小写。
    PL/SQL 块中的每一条语句都必须以分号结束,SQL 语句可以是多行的,但分号表示该语
    句结束。一行中可以有多条 SQL 语句,他们之间以分号分隔,但是不推荐一行中写多条语
    句。
    PL/SQL 中的特殊符号说明:
    类型  符号  说明
    赋值运算符  :=  Java 和 C#中都是等号,PL/SQL 的赋值是:=
    特殊字符
    ||  字符串连接操作符。
    --  PL/SQL 中的单行注释。
    /*,*/  PL/SQL 中的多行注释,多行注释不能嵌套。
    <<,>>  标签分隔符。只为了标识程序特殊位置。
    ..  范围操作符,比如:1..5  标识从1到5
    算术运算符
    +,-,*,/  基本算术运算符。
    **  求幂操作,比如:3**2=9
    关系运算符
    >,<,>=,<=,=  基本关系运算符,=表示相等关系,不是赋值。
    <>,!=  不等关系。
    逻辑运算符  AND,OR,NOT  逻辑运算符。
    表 1  PL/SQL 中的特殊符号和运算符
    ²  变量声明
    PL/SQL 支持 SQL 中的数据类型,PL/SQL 中正常支持 NUMBER, VARCHAR2,DATE 等 Oracle
    SQL 数据类型。声明变量必须指明变量的数据类型,也可以声明变量时对变量初始化,变量
    声明必须在声明部分。声明变量的语法是:
    语法格式:声明变量
    变量名  数据类型[ :=初始值]
    语法解析:
    数据类型如果需要长度,可以用括号指明长度,比如:varchar2(20)。
    代码演示:声明变量
    SQL> DECLARE
    2        sname VARCHAR2(20) :='jerry';  ①
    3   BEGIN
    4        sname:=sname||' and tom';  ②
    5        dbms_output.put_line(sname);  ③
    6   END;
    7   /jerry
    PL/SQL procedure successfully completed
    代码解析:
    ①  声明一个变量 sname,初始化值是“jerry”。字符串用单引号,如果字符串中出现单
    引号可以使用两个单引号(’’)来表示,即单引号同时也具有转义的作用。
    ②  对变量 sname 重新赋值,赋值运算符是“:=”。
    ③  dbms_output.put_line 是输出语句,可以把一个变量的值输出,在 SQL*Plus 中输出
    数据时,可能没有结果显示,可以使用命令: set serveroutput on 设置输出到 SQL*Plus
    控制台上。
    对变量赋值还可以使用 SELECT…INTO  语句从数据库中查询数据对变量进行赋值。但是
    查询的结果只能是一行记录,不能是零行或者多行记录。
    代码演示:变量赋值
    SQL> DECLARE
    2        sname VARCHAR2(20) DEFAULT 'jerry';  ①
    3   BEGIN
    4        SELECT ename INTO sname FROM emp WHERE empno=7934;  ②
    5        dbms_output.put_line(sname);
    6   END;
    7   /
    MILLER
    PL/SQL procedure successfully completed
    代码解析:
    ①  变量初始化时,可以使用 DEFAULT 关键字对变量进行初始化。
    ②  使用 select…into 语句对变量 sname 赋值,要求查询的结果必须是一行,不能是多
    行或者没有记录。
    ²  声明常量
    常量在声明时赋予初值,并且在运行时不允许重新赋值。使用 CONSTANT 关键字声明常
    量。
    代码演示:声明常量
    SQL> DECLARE
    2        pi CONSTANT number :=3.14;  --圆周率长值  ①
    3        r number DEFAULT 3;   --圆的半径默认值3   ②
    4        area number;   --面积。
    5   BEGIN
    6        area:=pi*r*r;   --计算面积
    7        dbms_output.put_line(area);  --输出圆的面积
    8   END;
    9   /
    28.26
    PL/SQL procedure successfully completed
    代码解析:
    ①  声明常量时使用关键字 CONSTANT,常量初值可以使用赋值运算符(:=)赋值,也
    可以使用 DEFAULT 关键字赋值。
    在 SQL*Plus 中还可以声明 Session(会话,也就是一个客户端从连接到退出的过程称为
    当前用户的会话。)全局级变量,该变量在整个会话过程中均起作用,类似的这种变量称为
    宿主变量。宿主变量在 PL/SQL 引用时要用“:变量名”引用。
    代码演示:宿主常量
    SQL> var emp_name varchar(30);  ①
    SQL> BEGIN
    2   SELECT ename INTO :emp_name FROM emp WHERE empno=7499;  ②
    3   END;
    4   /
    PL/SQL procedure successfully completed
    emp_name
    ---------ALLEN
    SQL> print emp_name;  ③
    emp_name
    ---------ALLEN
    代码解析:
    ①  可以使用 var 声明宿主变量。
    ②  PL/SQL 中访问宿主变量时要在变量前加“:”。
    ③  在 SQL*Plus 中,使用 print 可以输出变量中的结果

  • 相关阅读:
    ZipHelper 压缩和解压帮助类
    搜索引擎索引数据结构和算法
    Api之Cors跨域以及其他跨域方式
    UML类图
    NetAnalyzer2016使用方法
    30分钟快速掌握AngularJs
    抖屏与收发各种类型文件
    NET Core RC2
    如何检测被锁住的Oracle存储过程及处理办法汇总(转)
    oracle spfile和pfile文件(转)
  • 原文地址:https://www.cnblogs.com/shaohz2014/p/3717823.html
Copyright © 2020-2023  润新知