初始PL/SQL
PL/SQL 基本结构
declare
– 声明部分
begin
<executable command(s)> – 执行部分
exception
– 异常处理部分
end;
声明部分:包含变量、常量定义,由 declare 关键字开始,如果不声明变量,可以省略这部分
执行部分:所有可执行 PL/SQL 语句放在这部分,由 begin 关键词开始, end 关键词结束,这部分不可省略,注意 end 后的分号
异常处理部分:用 exception 关键词把可执行部分分成两个小部分,之前程序正常执行,一旦出现异常就跳转到异常部分执行
PL/SQL 标识符
变量声明
变量名 数据类型 [ not null ] [ := 初始值 ] | [ defacult 初始值 ]
常量声明
----常量声明后不可再次赋值
变量名 constant 数据类型 [ not null ] [ := 初始值 ] | [ defacult 初始值 ]
PL/SQL IF-THEN语句
if 条件 then
----条件成立执行语句
end if;
PL/SQL IF-THEN-ELSE语句
if 条件 then
----条件成立执行语句
else
----条件不成立执行语句
end if;
PL/SQL IF-THEN-ELSE语句
if 条件1 then
----条件1成立执行语句
elseif 条件2 then
----条件2成立执行语句
elseif 条件3 then
----条件3成立执行语句
else
----条件1、2、3都不成立执行语句
end if;
PL/SQL CASE语句
(如果选择器和表达式匹配就执行对应的执行语句,如果选择器与所有表达式都不匹配,就执行else后面执行语句)
case 选择器
when 表达式1 then 执行语句1;
when 表达式2 then 执行语句2;
when 表达式3 then 执行语句3;
when 表达式4 then 执行语句4;
else 执行语句;
end case;
PL/SQL LOOP语句
(无限循环语句,如果不添加 exit where 语句 或者 exit 语句就是无限循环,exit 类似于 break)
loop
----循环体
----[ exit where 退出循环条件 ]
----[ if … then
exit;
end if ]
end loop;
PL/SQL WHILE语句
where 条件 loop
----循环体
end loop;
PL/SQL FOR语句
(reverse表示从循环上限到下限循环)
for 循环变量 in [ reverse ] 循环下限…循环上限 loop
----循环体
end loop;
存储过程
创建存储过程:
create [ or replace ] procedure 过程名称 [ ( 参数列表) ] { is | as }
----声明变量
begin
----执行代码
end [过程名称];
例如:
create or replace procedure p_hello is
begin
dbms_output.put_line(‘hello world’);
end p_hello;
调用存储过程:
exec 存储过程名称 [ (参数) ]
或者:
execute 存储过程名称 [ (参数) ]
或者:
begin
----存储过程名称 [ (参数) ]
end
删除过程:
drop procedure 过程名称
函数
创建函数:
create [ or replace ] function 函数名称 [ (参数列表) ] return 返回值类型
{ is | as }
----声明变量
begin
----执行代码
end [函数名称];
调用函数:
declare
----创建变量存储函数调用返回值
begin
----调用函数赋值给变量
end;
删除函数:
drop function 函数名称
包和包体
创建包
create [ or replace ] package 包名称 is | as
----定义公用常量、变量、过程、函数等(不能有具体实现)
end [ 包名称 ];
创建包体
create [ or replace ] package body 包名称 is | as
----定义公用常量、变量、过程、函数等
----实现公用过程和函数
end [ 包名称 ];
调用包
declare
----定义变量
begin
----包名.元素名称(参数)
end
删除包或者包体
drop package [ body ] [ user. ] 包名
触发器
创建触发器
create [or replace] tigger 触发器名 { before | after } { insert | update | delete }
on 表名 ---- 数据库触发器所在的表。
[for each row] ---- 对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
begin
----pl/sql语句
end
删除触发器
drop tigger 触发器名称
触发器功能
允许/限制对表的修改
自动生成派生列,比如自增字段
强制数据一致性
提供审计和日志记录
防止无效的事务处理
启用复杂的业务逻辑