pl/sql
pl(procedure language)/sql是oracle在数据库中引入的一种过程化的编程语言。
它是对sql的补充:具有为程序开发而设计的特性;
在pl/sql中可以使用变量,进行流程控制,来实现比较复杂的业务逻辑;
程序结构
declare
[变量声明]
begin
[语句序列]
exception
[异常处理程序]
end;
/
特殊类型的变量
1.[字段名]%type 类型
声明一个与指定表的指定列的相同类型的变量,用于存放一个字段的值。
2.[表名]%rowtype 类型
声明一个与指定表的行结构相同的变量,用于存放一条记录。
3.cursor类型(游标类型)
声明一个表对象类型的变量,用于存放一个查询结果集 。
注意:
在pl/sql程序中,select语句返回的数据是一行时,select语句总是和into相配合,into后跟用于接受查询结果的变量,形式:
select 列名1,列名2.....
into 变量1,变量2.....
from 表名 where 条件;
当程序要接受返回的多行结果时,可以采用游标变量来存放
栗子1:查询学号为 001101 的学生的学号与姓名
set serveroutput on;
declare
stuno xs.sno%type;
stuname xs.sname%type;
begin
select sno,sname into stuno,stuname
from xs where sno='001101';
dbms.output.put_line(stuno||stuname);
end;
/
这样可以将查询的结果保存起来 显示或者提供给下面程序进行使用。那么保存的结果就放在定义的 stuno和stuname变量中。dbms_output.put_line显示出查询的结果。
查询学号为001101的学生的信息(存储表的一行)
set serveroutput on;//开关变量 设为on
declare
stu xs%rowtype;
begin
select * into stu from xs where sno='001101';
dbms_output.put_line(stu.sno||stu.sname);
end;
/
游标
用来查询数据库,获取记录集合的指针,让开发者能一次访问一行或者多行结果集,在每条结果集上做操作。
它的作用就是临时存储从数据库库中提取的数据块。
游标定义的格式
cursor 游标名 is select 语句;
游标循环的两种方式
1 游标变量循环
2 游标 for循环
1.游标变量循环
open 游标;
loop
fetch 游标 into 游标变量;
处理语句;
exit when 游标%notfound ;
end loop
close 游标;
for循环格式
for 游标变量 in 游标 loop;
--处理语句;
end loop;
栗子:查询所有学生的学号和姓名 (利用游标变量循环)
declare
stu xs%rowtype;
cursor cur_stu is select * from xs;
begin
open cur_stu;
loop
fetch cur_stu into stu;
exit when cur_stu%notfound;
dbms_output.put_line(stu.sno||stu.sname);
end loop
close cur_stu;
end;
/
利用 for循环求
declare
cursor cur_stu is select * from xs;
begin
for stucur in cur_stu loop;
dbms_output.put_line(stucur.sno||stucur.sname);
end loop;
end;
/