1 PL SQL概念
PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。
PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,
所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,
通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。
2 开发工具
(1) SQL Plus: Oracle公司的工具
(2) PL/SQL Developer: 一个独立的集成开发环境(IDE)
3 PL/SQL 编程分类
1 过程(存储过程)
2 函数
3 触发器
4 包
5 其它
4 注释
单行注释:-要注释的内容
多行注释:/*要注释的内容*/
5 标识符规范(仅供参考)
变量:用v作为前缀
常量:用c作为前缀
游标:用cursor为后缀
异常:用e作为前缀
6 PL/SQL块结构
声明(定义)部分:使用关键字 declare 定义变量、游标等等
执行部分:以 begin 关键字开始
异常控制部分: 捕获执行中产生的错误
结束部分:以end关键字结尾
例1:
SQL>set serveroutput on --打开输出选项
begin
dbms_output.putline(‘Hello PL/SQL !‘);
end;
例2
SQL>declare
v_ename varchar2(5); --定义一个字符串变量
begin
select ename into v_ename from emp where empno = &no;
dbms_output.put_line(‘姓名:‘ || v_ename);
end;
说明:& 表示要从控制台输入的变量
例3
SQL>declare v_ename varchar2(5); --定义一个字符串变量
begin
select ename into v_ename from emp where empno = &no;
dbms_output.put_line(‘姓名:‘ || v_ename);
--下面是异常处理
exception
when no_data_found then
dbms_output.put_line(‘出现错误!‘);
end;
注意:no_data_found 表示一种异常,即如果用户输入的参数"&no" 查不出数据
7 创建存储过程
SQL>create procedure sp_proName1(spName varchar2,newSalary number) is
begin
update emp set sal =newSalary where ename = spName
end;
8 执行存储过程
语法:exec 存储过程名称(参数);
SQL>exec sp_proName1(‘OBAMA‘,10000);
9 创建函数
语法:create function 函数名称(参数) return 返回值;
10 调用函数(SQL Plus)
语法:(1) var 变量1 类型; // 定义变量用来保存调用函数后返回的结果
(2) call 函数名称(参数) into:变量1; // 使用call关键字调用函数,并将函数返回的结果保存在变量1中
(3) print 变量1; // 显示结果
11 包的创建
包:函数和存储过程的组合
语法: create package 包名称 is procedure 存储过程名称(参数);
function 函数名称(参数) return 变量;
end;
12 创建包体(Package Body)
语法:create package body 包体名称 is
... //存储过程创建过程
... //函数创建过程
end;
13 调用包的函数和存储过程
调用存储过程
语法:call 包名.存储过程名称(参数);
调用函数
语法:call 包名.函数名称(参数);
注意: call关键字也可以换成 exec
14 触发器
触发器是指隐含执行的存储过程。当定义触发器时必须指定触发的事件和触发的操作。
使用create trigger 来创建触发器
15 游标
(暂略)
16 if语句的使用
SQL> create or replace procedure Name1(spName varchar2) is
v_salary emp.sal%type;
begin
select sal into v_salary from emp where ename = spName;
if v_salary < 3000 then
update emp set sal=sal * 1.2 where ename = spName;
end if;
end;
17 if...then...else语句
SQL> create or replace procedure Name1(spName varchar2) is
v_salary emp.sal%type;
begin
select sal into v_salary from emp where ename = spName;
if v_salary < 3000 then
update emp set sal=sal * 1.2 where ename = spName;
else
update emp set sal=sal * 1.05 where ename = spName;
end if;
end;
18 使用loop循环
SQL> create or replace procedure Name1(spName varchar2) is
v_num :=1;
begin
loop
insert into users values (v_num,spname);
exit whrn v_num=10;
v_num := v_num + 1;
end loop;
end;
注意:在这里“:=”表示赋值的意思
19 使用 while 循环
SQL> create or replace procedure Name1(spName varchar2) is
v_num :=1;
begin
while v_num <10 loop
insert into users values (v_num,spname);
v_num := v_num + 1;
end loop;
end;