您的位置:首页 > 数据库

初识PL/SQL

2016-03-23 21:58 447 查看

什么是PL/SQL?

PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。

PL/SQL程序结构:

declare
说明部分(变量说明、光标声明、例外说明)
begin
语句序列(DML语句)
exception
例外处理语句
end;


PL/SQL变量的声明

基本变量类型:采用oracle基本数据类型声明的变量就是基本类型变量。

例:

set serveroutput on
declare
pnum number := 1;
begin
dbms_output.put_line(pnum);
end;


引用变量类型 :指引用已存在的变量的类型或者某个表字段的类型来做为自己的变量类型。

使用引用变量类型的优点:

定义变量时不必查看表中各个字段的类型。

当源类型改变时,使用%type定义的变量类型也会跟着改变。

例:

set serveroutput on --打开oracle自带的输出方法dbms_output
declare
pnum number := 1;
pnum2 pnum%type := 2; --引用变量pnum的类型
pemp_name employee.emp_name%type; --引用员工表的员工姓名字段的类型
begin
dbms_output.put_line(pnum2);
pemp_name := '员工姓名';
dbms_output.put_line(pemp_name);
end;


记录型变量:记录型变量可以存储多个字段类型组成一行;分为两种:

record:存储自定义字段的所有类型。

%rowtype:存储某个表中一行所有字段的类型。

例:

set serveroutput on;
declare
--声明record类型
type r_type is record(
r_id number(10,0),
r_name varchar2(40)
);
remp r_type;
prow employee%rowtype;
begin
select * into prow from employee where emp_id = 1;
dbms_output.put_line('员工id: '||prow.emp_id);
dbms_output.put_line('员工姓名: '||prow.emp_name);

select emp_id, emp_name into remp from employee where emp_id = 2;
dbms_output.put_line('员工id: '||remp.r_id);
dbms_output.put_line('员工姓名: '||remp.r_name);
end;


流程控制语句

条件结构

if - then语句

if 条件 then
语句块
end if;


if - then - else语句

if 条件 then
语句块
else
语句块
end if;


if - then - elsif

if 条件 then
语句块
elsif then
语句块
end if;


case语句

case 变量
when value then 语句块
when value then 语句块
when value then 语句块
...
[else 语句块]
end case;


例:

set serveroutput on
accept num prompt "请输入一个数字";
declare
pnum number := #
begin
case pnum
when 1 then dbms_output.put_line(1);
when 2 then dbms_output.put_line(2);
when 3 then dbms_output.put_line(3);
when 4 then dbms_output.put_line(4);
else dbms_output.put_line(pnum);
end case;
end;


循环结构

while loop循环:循环开始前先判断条件是否为true,当条件为true时才会执行循环;每循环一次后会判断条件是否继续满足;不满足则退出循环;

while 执行循环条件 loop
语句块;
end loop;


例:

set serveroutput on
declare
pnum number := 1;
begin
while pnum < 10 loop
dbms_output.put_line(pnum);
pnum := pnum + 1;
end loop;
end;


loop循环:使用exit关键字来退出循环;也可以用【exit when】的方式声明退出循环的条件;

loop
exit when 退出循环条件;
语句块;
end loop;


例:

set serveroutput on
declare
pnum number := 1;
begin
loop
exit when pnum > 10;
dbms_output.put_line(pnum);
pnum := pnum + 1;
end loop;
end;


for loop循环:清楚的知道循环的次数,并且确定了循环的范围。

for i in [reverse] min_number..max_number loop
语句块;
end loop;


例:

set serveroutput on
begin
for i in 0..30 loop
dbms_output.put_line(pnum);
end loop;
end;


ps. 循环一开始就会将min_number复制给i,并且每循环一次都会在原来的基础上加1,直到循环到i等于max_number为止;使用reverse关键字可以让流程倒过来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: