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块的主要内容,如果未能解决你的问题,请参考以下文章
oracle(sql)基础篇系列——PLSQL游标存储过程触发器