一、什么是PLSQL
我们常用SQL语句到数据库中查询我们想要的数据。SQL(也叫SQL99)是操作所有关系型数据库的规则。
像Oracle DB2 SQLServer MySQL 等等,这些数据库都是支持SQL99。
而PLSQL就是Oracle数据库服务器对SQL99进行了符合自身特点的扩展。
所以可理解为 PLSQL语法 = SQL语法 + oracle自身的语法。
二、为什么有了SQL,还需要PLSQL?
因为SQL强调结果,来一条SQL语句,就显示出相应结果
而PLSQL则强调过程,二者互相弥补。
三、PLSQL程序的完整组成结构如下:
[declare] (可写)
变量声明;
begin
DML/TCL操作;
[exception] (可写)
例外处理;
end;
/
注意:在PLSQL程序中,;号表示每条语句的结束,/表示整个PLSQL程序结束
例子:
set serveroutput on; --设置显示PLSQL程序的执行结果,默认情况下,不显示PLSQL程序的执行结果
-- 在一次会话中有效
--向SQLPLUS客户端工具输出字符串
begin
dbms_output.put_line('hello 你好');
end;
/
四、PLSQL类型
// 变量i,数值类型,不超过99
i nubmber(2);
// 变量j,数值类型,不超过999,默认值为100
j number(3):=100;
message varcher(12) := '哈哈';
// pname的类型与emp表的ename字段相同
pname emp.ename%type;
// pemp的类型和emp的表结构一致,通过pemo.字段名获取相应字段
pemp emp%rowtype;
五、PLSQL判断和循环
if 条件 then 语句1;
语句2;
end if;
if 条件 then 语句1;
else 语句2;
end if;
if 条件 then 语句;
elsif 语句 then 语句;
else 语句;
end if;
Loop
exit when 语句;
语句
语句
end loop;
while 语句
loop
语句
语句
end loop;
for i in 20 .. 30 // 这两个点是固定写法,不用自++
loop
语句
语句
end loop;
六、PLSQL游标
类似于JDBC中的ResultSet对象的功能,从上向下依次获取每一记录的内容
--使用无参光标cursor,查询所有员工的姓名和工资
--【如果需要遍历多条记录时,使用光标cursor,无记录找到使用cemp%notfound】
declare
--定义游标
cursor cemp is select ename,sal from emp;
--定义变量
vename emp.ename%type;
vsal emp.sal%type;
begin
--打开游标,这时游标位于第一条记录之前
open cemp;
--循环
loop
--向下移动游标一次
fetch cemp into vename,vsal;
--退出循环,当游标下移一次后,找不到记录时,则退出循环
exit when cemp%notfound;
--输出结果
dbms_output.put_line(vename||'--------'||vsal);
end loop;
--关闭游标
close cemp;
end;
/
--使用带参光标cursor,查询10号部门的员工姓名和工资
declare
cursor cemp(pdeptno emp.deptno%type) is select ename,sal from emp where deptno=pdeptno;
pename emp.ename%type;
psal emp.sal%type;
begin
open cemp(&deptno);
loop
fetch cemp into pename,psal;
exit when cemp%notfound;
dbms_output.put_line(pename||'的薪水是'||psal);
end loop;
close cemp;
end;
/