版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35537301/article/details/83718763
一、PL/SQL语言
1、概述
PLSQL语言是Oracle公司对SQL语言的功能的扩展,它是将过程性结构与Oracle SQL无缝的集成在一起而产生的一种结构化的强有力的语言,是一种高级数据库程序设计语言
执行效率比直接调用java代码快的多
2、语法格式
[declare] --声明变量
变量名 变量的类型;--此处可以声明变量,常量,游标,异常
begin
业务逻辑
[exception]--异常
异常处理语句
end;
二、变量和常量
2.1 赋值
:= 在PL/SQL中是赋值的意思
2.2 常量
constant 常量 相当于 java final;
2.3 引用型变量
%type 引用类型变量
v_sal emp.sal%type;
v_sal的类型,与emp表中sal字段的类型一致
2.4 记录型变量
%rowtype 记录型变量
v_obj emp%rowtype;
v_obj可以和emp表中某一行的所有类型一致
将emp表中的某一条数据,存储在v_obj中,可以使用 v_obj.字段名,来查询数据
2.5 打印输出
dbms_output.put_line(要打印的变量); 打印数据
2.6 案例
declare
v_age number(3):=1; --:=就是赋值 =相当于Java中的==
v_name varchar2(30):='sminth';
v_sal emp.sal%type:=100; --引用型变量
v_row emp%rowtype; --记录型变量
v_sex constant number(1):=1; --constant常量 相当于Java final
begin
--v_sex:=0; --常量在此赋值会报错
v_age:=100;
select ename,sal into v_name,v_sal from emp where empno=7788;
select * into v_row from emp where empno=7788;
dbms_output.put_line(v_row.ename||v_row.sal||v_row.job);
end;
三、判断
3.1 格式1
if 条件 then
逻辑处理语句
end if;
3.2 格式2
if 条件 then
逻辑处理语句
else
逻辑处理语句
end if;
3.3 格式3
if 条件 then
逻辑处理语句
elsif 条件 then
逻辑处理语句
elsif 条件 then
逻辑处理语句
...........
else
逻辑处理语句
end if;
3.4 案例:输入年龄,输出人的类型
declare
v_age number(3) := 0;
begin
v_age :=&aa;
if v_age < 18 then
dbms_output.put_line('萝莉or正太');
elsif v_age >=18 and v_age<60 then
dbms_output.put_line('大叔or小姐姐');
else
dbms_output.put_line('广场舞主力');
end if;
end;
四、循环
4.1 死循环
loop
循环的内容
end loop;
循环输出1-100个数
declare
v_num number(3):=1;
begin
loop
if v_num>100 then
exit;--跳出
end if;
dbms_output.put_line(v_num);
v_num:=v_num+1;
end loop;
end;
declare
v_num number(3) :=1;
begin
loop
exit when v_num>100;
dbms_output.put_line(v_num);
v_num :=v_num + 1;
end loop;
end;
4.2 while循环
while 条件
loop
循环的内容
end loop;
declare
v_num number(3):=1;
begin
while v_num <101
loop
dbms_output.put_line(v_num);
v_num :=v_num+1;
end loop;
end;
4.3 for循环
for 变量名 in 起始值 .. 终止值
loop
循环的内容
end loop;
declare
v_num number(3):=1;
begin
for v_num in 1..100
loop
dbms_output.put_line(v_num);
end loop;
end;
begin
for v_num in 1..100
loop
dbms_output.put_line(v_num);
end loop;
end;
五、游标(集合)
1.什么是游标
游标是用来接受多个对象的
2. 游标的定义语法
cursor 游标名称 is sql查询语句;
3. 游标的使用语法
open 游标名称;
loop
fetch 游标名称 into 记录型变量; --使用关键字fetch将游标中的一条数据取出,使用into关键字将数据放入一个变量中
exit when 游标名称%notfound; --当游标中没有数据的时候,退出循环
end loop;
close 游标名称;
4. 案例
使用游标,打印输出员工部门为10的员工信息
declare
cursor c1 is select * from scott.emp where deptno = 10;--给游标赋值
v_obj scott.emp % rowtype;
begin
open c1;--打开游标
loop
fetch c1 into v_obj;
exit when c1 % notfound;--判断游标为空之后跳出
dbms_output.put_line(v_obj.empno || '==' || v_obj.ename);
end loop;
close c1 ;--关闭游标
end;
declare
cursor c1 is select * from scott.emp where deptno = 10;
v_obj scott.emp % rowtype;
begin
for v_obj in c1--帮助我们做打开和关闭的操作
loop
dbms_output.put_line(v_obj.empno || '==' || v_obj.ename);
end loop;
end;
带参数的游标
declare
cursor c1(dno number) is select * from scott.emp where deptno = 10;
v_obj scott.emp % rowtype;
begin
open c1(20);--打开游标,并赋值
loop
fetch c1 into v_obj;
exit when c1%notfound;--判断游标为空后跳出
dbms_output.put_line(v_obj.empno || '==' || v_obj.ename);
end loop;
close c1;--关闭游标
end;
七、异常
1. 系统定义的异常
2.系统定义的异常的使用
declare
v_num number(3) :=7;
begin
v_num :=v_num/0;
exception ---开始捕获异常
when zero_divide then
dbms_output.put_line('这是个除零异常');
end;
declare
v_num number(3) :=7;
begin
v_num :=v_num/0;
exception ---开始捕获异常
when others then ---
dbms_output.put_line('这是个除零异常');
end;
3.自定义异常
declare
v_age number(3) := 0;
ex_age exception;--声明异常类型的变量
begin
v_age :=&aa;
if v_age >140 then
raise ex_age;--抛出异常
end if;
if v_age < 18 then
dbms_output.put_line('萝莉or正太');
elsif v_age >=18 and v_age<60 then
dbms_output.put_line('大叔or小姐姐');
else
dbms_output.put_line('广场舞主力');
end if;
exception
when ex_age then
dbms_output.put_line('未知生物');
end;