PL/SQL语法
1.语法结构:
[DECLARE
--declaration statements] ①
BEGIN
--executable statements ②
[EXCEPTION
--exception statements] ③
END;
语法解析:
① 声明部分:声明部分包含了变量和常量的定义。这个部分由关键字 DECLARE 开始,如果不声明变量或者常量,可以省略这部分。
②执行部分:执行部分是 PL/SQL 块的指令部分,由关键字 BEGIN 开始,关键字 END结尾。所有的可执行 PL/SQL 语句都放在这一部分,该部分执行命令并操作变量。其他的 PL/SQL 块可以作为子块嵌套在该部分。PL/SQL 块的执行部分是必选的。注意 END 关键字后面用分号结尾。
③ 异常处理部分:该部分是可选的,该部分用 EXCEPTION 关键字把可执行部分分成两个小部分,之前的程序是正常运行的程序,一旦出现异常就跳转到异常部分执行。
2.语法格式:声明变量
变量名 数据类型[ :=初始值]
数据类型如果需要长度,可以用括号指明长度,比如:varchar2(20)。
--代码演示:声明变量
DECLARE
sname VARCHAR2(20):='jerry';
BEGIN
sname:=sname || 'and tom';
dbms_output.put_line(sname);
END;
DECLARE
sname VARCHAR2(20) DEFAULT 'jerry'; --①
BEGIN
SELECT ename INTO sname FROM emp WHERE empno = 7934; --②
dbms_output.put_line(sname);
END;
代码解析:
① 变量初始化时,可以使用 DEFAULT 关键字对变量进行初始化。
② 使用 select…into 语句对变量 sname 赋值,要求查询的结果必须是一行,不能是多行或者没有记录。
常量在声明时赋予初值,并且在运行时不允许重新赋值。使用 CONSTANT 关键字声明常
量。
pi CONSTANT number := 3.14; --圆周率长值 不可变量CONSTANT
属性数据类型
%ROWTYPE引用数据库表中的一行作为数据类型,即 RECORD 类型(记录类型),是 PL/SQL 附加的
%TYPE
%TYPE 可以引用表中的某列作的类型为变量的数据类型,也可以引用某变量的类型作为新变量的数据类型。
DECLARE
sal emp.sal%TYPE;
mysal number(4):=3000;
totalsal mysal%TYPE; --引用mysal的类型作为totalsal的数据类型
3.条件控制
1).IF语法
IF 条件 THEN
--条件结构体
END IF;
2).IF-THEN-ELSE
语法格式:IF-THEN-ELSE
IF 条件 THEN
--条件成立结构体
ELSE
--条件不成立结构体
END IF;
3).CASE
CASE 是一种选择结构的控制语句,可以根据条件从多个执行分支中选择相应的执行动
作。也可以作为表达式使用,返回一个值。类似于 C#中的 switch 语句。语法是:
--不返回值
CASE [selector]
WHEN 表达式 1 THEN 语句序列 1;
WHEN 表达式 2 THEN 语句序列 2;
WHEN 表达式 3 THEN 语句序列 3;
……
[ELSE 语句序列 N];
END CASE;
--返回一个值
num:=
CASE [selector]
WHEN 表达式 1 THEN 值 1
WHEN 表达式 2 THEN 值 2 --没有分号
WHEN 表达式 3 THEN 值 3
……
[ELSE 值 N];
END ; --没有case
4.循环结构
1).LOOP-END LOOP循环
语法格式:
LOOP
--循环体
END LOOP;
语法格式:
1. 循环体在 LOOP 和 END LOOP 之间,在每个 LOOP 循环体中,首先执行循环体中的语
句序列,执行完后再重新开始执行。
2. 在 LOOP 循环中可以使用 EXIT 或者[EXIT WHEN 条件]的形式终止循环。否则该循环
就是死循环。
2).while循环
先判断条件,条件成立再执行循环体。
语法格式:
WHILE 条件 LOOP
--循环体
END LOOP;
3).for循环
语法格式:
FOR 循环变量 IN [REVERSE] 循环下限..循环上限 LOOP
--循环体
END LOOP;
语法解析:
循环变量:该变量的值每次循环根据上下限的 REVERSE 关键字进行加 1 或者减 1。
REVERSE:指明循环从上限向下限依次循环。
5.顺序结构
GOTO语句,NULL语句
GOTO 语句将无条件的跳转到标签指定的语句去执行。标签是用双尖括号括起来的标示
符,在 PL/SQL 块中必须具有唯一的名称,标签后必须紧跟可执行语句或者 PL/SQL 块。
GOTO 不能跳转到 IF 语句、CASE 语句、LOOP 语句、或者子块中。
NULL 语句什么都不做,只是将控制权转到下一行语句。NULL 语句是可执行语句。NULL
语句在 IF 或者其他语句语法要求至少需要一条可执行语句,但又不需要具体操作的地
方。比如 GOTO 的目标地方不需要执行任何语句时。
DECLARE
num int:='&input';
BEGIN
IF num > 100 THEN
GOTO first_label; --①
ELSE
GOTO second_label; -- ②
END IF;
<<first_label>>--③
dbms_output.put_line('firstlabel');
<<second_label>> --④
NULL;
END;
代码解析:
① 跳转到程序 first_label 位置,就是②的位置,first_label 是一个标签,用两个尖括号包含。
② 无条件跳转到 sedond_label 位置,就是④的位置。④处不执行任何内容,因此是一个 NULL 语句