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

时间:2022-03-11 06:19:28

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 可以输出变量中的结果

Oracle PL/SQL 语言(Procedural Language/SQL)的更多相关文章

  1. 数据库系统学习(十)-嵌入式SQL语言之动态SQL

    第十讲 嵌入式SQL语言之动态SQL 静态SQL 区别变量和属性:高级语言向嵌入式SQL传递变量的方法 动态SQL 动态构造SQL语句是应用程序员必须掌握的重要手段 SQL语句的动态构造示例 根据界面 ...

  2. oracle PL&sol;SQL(procedure language&sol;SQL)程序设计

    PL/SQL(procedure language/SQL)语言是Oracle对SQL语言的过程化扩充,是一个完整的编程语言.PL/SQL实现了过程化语句(如分支.循环等)与SQL语句的无缝连接,将过 ...

  3. 学习笔记:oracle学习三:SQL语言基础之sql语言简介、用户模式

    目录 1.sql语言简介 1.1 sql语言特点 1.2 sql语言分类 1.3 sql语言的编写规则 2.用户模式 2.1 模式与模式对象 2.2 实例模式scott 本系列是作为学习笔记,用于记录 ...

  4. oracle PL&sol;SQL(procedure language&sol;SQL)程序设计之异常(exception)

    什么是异常?在PL/SQL中的一个标识.在程序运行期间被触发的错误.异常是怎样被触发的?产生一个Oracle错误.用户显示触发.怎样处理异常?用异常处理句柄捕获异常.传播异常到调用环境. 捕获异常 E ...

  5. oracle PL&sol;SQL(procedure language&sol;SQL)程序设计之函数&plus;过程&plus;包

    匿名PL/SQL块回顾 DECLARE (可选)    定义在PL/SQL块中要使用的对象BEGIN (必须)    执行语句EXCEPTION (可选)    错误处理语句END; (必须)匿名块( ...

  6. oracle PL&sol;SQL(procedure language&sol;SQL)程序设计之游标cursors

    游标 Cursors--Conception 每一条被Oracle服务器执行的SQL语句都有一个独立的游标与之相关联:隐式游标 Implicit cursors: 用于所有的DML和PL/SQL的SE ...

  7. oracle PL&sol;SQL(procedure language&sol;SQL)程序设计之函数&plus;过程&plus;包(转)

    匿名PL/SQL块回顾 DECLARE (可选)     定义在PL/SQL块中要使用的对象 BEGIN (必须)     执行语句 EXCEPTION (可选)     错误处理语句 END; (必 ...

  8. oracle PL&sol;SQL(procedure language&sol;SQL)程序设计之触发器(trigger)

    创建触发器 触发器类似于过程和函数,都拥有声明.执行和异常处理过程的带名PL/SQL块.与包类似,触发器必须存储在数据库中.前面已经讲过,过程是显式地通过过程调用执行的,同时过程调用可以传递参数.与之 ...

  9. oracle PL&sol;SQL(procedure language&sol;SQL)程序设计&lpar;在PL&sol;SQL中使用SQL&rpar;

    在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的.使用SELECT语句从数据库中选取数据时,只能返回一行数据.使用COMMIT,  ROLLBACK, 和SA ...

随机推荐

  1. 聊下 git 使用前的一些注意事项

    连接方式https.ssh 在使用git的时候,不管你的服务器是开源平台github还是私服gitlab,你都需要clone仓库到本地,这个clone的时候就需要你选择连接方式.这个连接方式决定了你与 ...

  2. &lbrack;转&rsqb;ASP&period;NET页面之间传递值的几种方式

    页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...

  3. Keep Alive

    跳板机时经常出现连接被断开的情况.如果发生这种情况,请在客户端配置Keep Alive设置,具体方法参考如下: Windows: secureCRT:Properties -> Terminal ...

  4. 30天,O2O速成攻略【8&period;15长沙站】

    活动概况 时间:2015年08月15日13:30-16:30 地点:库可咖啡(长沙市岳麓区阜埠河路139号天马都乐街,湖南大学天马学生公寓东侧) 主办:APICloud.爱立示.兰软 网址:www.a ...

  5. C&num; 中的sealed修饰符学习

    转载原地址 http://developer.51cto.com/art/200908/147327.htm C#语言还是比较常见的东西,这里我们主要介绍C# sealed修饰符,包括介绍两个修饰符在 ...

  6. Java模拟网站登录02【转载】

    如何用Java代码模拟一些如百度.QQ之类的网站登录?有两个方式,一是发送模拟请求,二是模拟浏览器操作,而这两种方式恰好在Java有开源实现,在这里介绍一个工具包,它是家喻户晓的HttpClient. ...

  7. PHP strtotime在linux服务器时间延迟8小时问题

    今天客户反映有个功能投票模块第一天投了后,第二天就不能投了,理论上是第二天凌晨就可以再答题的,发现本地是正常的,linux服务器异常, 仔细查找原因发现是strtotime函数获取的值和本地获取的值不 ...

  8. 三 、 Multivariance Linear Regssion练习(转载)

    转载:http://www.cnblogs.com/tornadomeet/archive/2013/03/15/2962116.html 前言: 本文主要是来练习多变量线性回归问题(其实本文也就3个 ...

  9. Python之路&lpar;第九篇&rpar;Python文件操作

    一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r",encoding = “utf ...

  10. DelphiXE10&period;2怎么安装文本转语音&lpar;TTS&rpar;语音转文本&lpar;SR&rpar;控件(XE10&period;2&plus;WIN764)

    关资料: http://edn.embarcadero.com/article/29583 http://blog.sina.com.cn/s/blog_53866d7501017r1o.html 问 ...