PL/SQLPL/SQL块

Posted 习惯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PL/SQLPL/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 逻辑运算符。

 

※变量声明

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; 

 

代码解析:

① 声明一个变量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;

 代码解析:

① 变量初始化时,可以使用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;

 

代码解析:

① 声明常量时使用关键字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;

 

代码解析:
① 可以使用var声明宿主变量。
② PL/SQL中访问宿主变量时要在变量前加“:”。

 






以上是关于PL/SQLPL/SQL块的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQLPL/SQL过程

Oracle——PL/SQL

oracle(sql)基础篇系列——PLSQL游标存储过程触发器

如何在 Django Summernote 中显示编程片段的代码块?

Sphinx - 在代码块片段中使用省略号 (...)

Xcode 快速开发 代码块