什么是PL/SQL
PL/SQL(Procedural
Language/SQL)
一种过程化语言,通过增加编程语言的特点,实现对SQL的扩展
PL/SQL的特点
支持所有SQL的语法
支持case语句,方便的实现循环
通过继承,实现子类具有父类的属性和方法
设置了新的日期类型
PL/SQL的开发环境
Oracle数据据库服务器
Oracle开发工具
PL/SQL的工作原理
由PL/SQL引擎接收指令
将指令传递给Oracle数据库服务器执行

PL/SQL语句块
PL/SQL程序是按照块结构进行划分
块是PL/SQL程序的基本单位
DECLARE -->Declare用于声明变量、游标
v_name
varchar2(30)
:= 'Jack'; --定义用户名称
v_age
number
:= 6; --定义用户年龄
BEGIN -->表示程序的开始
--将用户的姓名和年龄插入到CLUB_USER
表中
insert into club_user
values
(v_name,
v_age);
Exception
/*当出现异常时的处理*/
When others
then
DBMS_OUTPUT.PUT_LINE('插入数据失败');
END; -->End表示程序结束
声明
使用declare关键字
用于定义变量或者常量
DECLARE
variable_name
[CONSTANT]
type
[NOT NULL] [:=value];
声明
变量名 是否为常量
变量的数据类型 是否为空 变量初始化
变量命名规则
变量名首字母必须是英文字母,其后可以是字母、数字或者特殊字符$、#和下划线
变量名长度不超过30个字符
变量名中不能有空格
条件结构
IF-THEN语句:
---------------
IF
condition
THEN
Statements
END
IF;
---------------
IF-THEN-ELSE语句:
---------------
IF
condition
THEN
Statements1
ELSE
Statements2
END
IF;
---------------
条件结构
IF-THEN-ELSIF语句
---------------
IF
condition1
THEN
Statements1
ELSIF
condition2
THEN
--注意是ELSIF而不是ELSEIF
Statements2
ELSE
Statements3
END
IF;
---------------
CASE语句
在Oracle 9i 后引入
---------------
CASE
variable
--依据variable表达式,选择相应的when子句执行
WHEN
value1 THEN statements1;
WHEN
value2 THEN statements2;
……
WHEN
valuen
THEN
statementsn;
[ELSE
else_statements;]
END
CASE;
---------------
例题:根据评分结果输出评价
DECLARE
grade
char:='A';
remark
varchar2(20);
BEGIN
CASE
grade
WHEN
'A' THEN remark:="is
Excellent";
WHEN 'B' THEN remark:="is
Good";
WHEN 'C' THEN remark:="is
Normal";
WHEN 'D' THEN remark:="is
Bad";
ELSE
remark:="big Problem"; --默认执行语句
END CASE;
END;
循环结构:
LOOP循环
----------------
LOOP
statements;
END
LOOP;
----------------
实现计数器功能,当计数器为10或者大于10时退出
DECLARE
v_count integer := 1;
BEGIN
LOOP
v_count:=v_count+1;
IF
v_count>=10
THEN
EXIT;
END
IF;
END LOOP;
END;
----------------
WHILE-LOOP循环:
类似于while循环
----------------
WHILE
conditon
LOOP
statements;
END
LOOP;
----------------
FOR-LOOP循环:
类似与for循环
----------------
FOR
loop_count
IN
[REVERSE] lower_bound..height_bound
LOOP
statements;
END
LOOP;
----------------
loop_count
--> 循环变量
lower_bound
-->循环次数最小值
height_bound
-->
循环次数最大值