目录
1.PL/SQL简介
PL/SQL块结构
代码注释和标示符
文本
2.数据类型、变量和常量
基本数据类型
特殊数据类型
定义变量和常量
PL/SQL表达式
3.流程控制语句
选择语句
循环语句
PL/SQL程序都是以块(BLOCK)为基本单位,整个PL/SQL块分三部分:声明部分、执行部分和异常处理部分:
[DECLARE]
--声明部分,可选
BEGIN
--执行部分,必须
[EXCEPTION]
--异常处理部分,可选
END
a.声明部分由关键字DECLARE开始,到BEGIN关键字结束。在这部分可以声明程序块中所用到的变量、常量和游标等。
注意:声明的内容只能在当前PL/SQL块中使用。
b.执行部分以关键字BEGIN开始,结束方式有两种:一是代码在运行时出现异常,则执行完异常处理部分的代码就结束,二是未出现异常或未使用异常处理,则以关键字END结束。执行部分是整个PL/SQL程序块的主体,主要的逻辑控制和运算都在这部分完成。
c.异常处理部分已关键字EXCEPTION开始,在该关键字所包含的代码执行完毕后,整个PL/SQL块也就结束了。异常处理部分用来纠正错误或给用户一些错误信息提示,甚至是将各种数据回退到异常产生之前的状态,多用WHEN THEN实现判断。
直接举个例子:
定义一个PL/SQL块,计算两个整数的和与这两个整数的差的商。
set serveroutput on 命令是为了实现在服务端显示执行结果。
1.单行注释:
由两个连接字符“--”开始,后面跟注释内容
2.多行注释:
由/*开头,以*/结尾
3.标识符:
标识符用于定义PL/SQL块单元和程序项的名称。通过使用标识符,可以定义常量、变量、异常、显示游标、游标变量、参数、子程序及包的名称。
注意:
当定义变量、常量时,每行只能定义一个变量或常量。
当定义变量、常量时,名称必须以英文字符开始。
当定义变量、常量时,名称只能使用符号a~z、A~Z、0~9、_、$和#。不能使用oracle关键字。
4.分界符:
符号 | 意义 | 符号 | 意义 |
+ | 加操作符 | >= | 大于等于操作符 |
- | 减操作符 | @ | 数据库链接指示符 |
* | 乘操作符 | / | 字符串分界符 |
/ | 除操作符 | : | 绑定变量指示符 |
= | 等于操作符 | ** | 指数操作符 |
> | 大于操作符 | := | 赋值操作符 |
< | 小于操作符 | => | 链接操作符 |
( | 起始表达式操作符 | .. | 范围操作符 |
) | 终结表达式操作符 | || | 范围操作符 |
; | 语句终结符 | << | 起始标签操作符 |
% | 属性指示符 | >> | 终结标签分界符 |
, | 项目分隔符 | -- | 单行注释指示符 |
<> | 不等于操作符 | /* | 多行注释起始符 |
!= | 不等于操作符 | */ | 多行注释终止符 |
~= | 不等于操作符 | 空格 | |
^= | 不等于操作符 | 制表符 | |
<= | 小于等于操作符 |
文本是指实际的数值的文字,包括:
数字文本:100 2.45 3e3 5E6 6*10**3 (科学计数法和幂操作符只适用于PL/SQL语句,不适用于SQL语句)
字符文本:'A' '9' '<' ' ' '%'
布尔文本:指BOOLEAN值(TRUE、FALSE和NULL)
日期时间文本:'10-NOV-91' '1997-10-22 13:01:01' '09-10-月-03'
字符串文本:'Hello World' '$9600' '10-NOV-91'
1.数值类型
number 如:number(9,2)
子类型:DEC,DECIMAL,DOUBLE,INTEGER,INT,NUMERIC,SMALLINT,BINARY_INTEGER,PLS_INTEGER
2.字符类型
VARCHAR2(maxlength) 最大为4000,超过则用LONG
CHAR(maxlength) 如果赋给char类型的值不足maxlength,会用空格补全
LONG
NCHAR和NVARCHAR2 才加入的类型
3.日期类型
DATE 7个字节,分别存储 世纪,年,月,日,小时,分钟,秒
4.布尔类型
BOOLEAN 只有三个值 TRUE,FALSE,NULL
1.%TYPE
可以声明一个与指定列相同的数据类型,它通常紧跟在指定列名的后面
如:
declare
var_job emp.job%TYPE;
2.RECORD类型
记录类型,使用该类型的变量可以存储由多个列值组成的一行数据。它是一种结构化的数据类型,需要先用type语句定义记录类型,然后才可以声明记录类型的变量
declare
type emp_type is record (
var_ename varchar2(20),
var_job varchar2(20),
var_sal number
);
empinfo emp_type; --定义变量
begin
select ename,job,sal
into empinfo
from emp
where empno=7369;
dbms_output.put_line(empinfo.var_ename||'的职务是'||'empinfo.var_job');
end;
3.%ROWTYPE类型
结合了以上两种类型的优点
declare
rowVar_emp emp%rowtype; --定义能够存储emp表中一行数据的变量
begin
select *
into rowVar_emp
from emp
where empno=7369;
dbms_output.put_line(rowVar_emp.ename||'的职务是'||'rowVar_emp.job');
end;
1.定义变量
<变量名> <数据类型> [(长度):=<初始值>];
变量名和数据类型必需
如: var_countryname varchar2(50):='中国';
2.定义常量
<常量名> constant <数据类型>:=<常量值>;
如: con_day constant integer:=365;
3.变量初始化
PL/SQL中,未初始化的变量默认被赋值为NULL,而不是随机的
1.字符表达式
只有一个,并置运算符 “||” ,用于把几个字符串连在一起
2.布尔表达式
一般用于判断,值只有TRUE,FALSE,NULL
有3个布尔运算符 AND,OR,NOT
布尔表达式中海还有一系列算术运算符,大于小于等于不等。
1. IF...THEN语句
if then
plsql_sentence
end if;
2.IF...THEN...ELSE语句
3.IF...THEN...ELSIF语句
4.case语句
case
when ... then ... ;
when ... then ... ;
...
when ... then ... ;
else ... ;
end case;
1.LOOP语句
loop语句会先执行一次循环体,再进行判断
loop
plsql_sentence;
exit when end_condition_exp
end loop;
2.WHILE语句
先判断,再执行
while condition_expression loop
plsql_sentence;
end loop;
3.FOR语句
可预置循环次数,有一个循环计数器
for 整型变量 in [reverse] 下限值..上限值 loop
plsql_sentence;
end loop;
默认随循环递增,使用reverse关键字时递减
4.GOTO语句
无条件转向语句
GOTO label;
执行GOTO语句时,控制程序会立即转到由标签标识的语句。label是PL/SQL中定义的符号,用双箭头<<>>括起来
<>
--程序其他部分
IF no>666 THEN
GOTO goto_mark;