9.2.1、格式
declare
--声明变量
begin
--业务逻辑
end;
9.2.2、变量
declare
--声明变量
-- 格式一:变量名 变量类型;
-- 格式二:变量名 变量类型 := 初始值;
-- 格式三:变量名 变量类型 := &文本框名;
-- 格式四:变量名 表名.字段名%type;
-- 格式五:变量名 表名%rowtype;
vnum number;
vage number := 28;
vabc number := &abc;--输入一个数值,从一个文本框输入
vsal emp.sal%type; --引用型的变量,代表emp.sal的类型
vrow emp%rowtype; --记录型的变量,代表emp一行的类型
begin
--业务逻辑
dbms_output.put_line(vnum); --输出一个未赋值的变量
dbms_output.put_line(vage); --输出一个已赋值的变量
dbms_output.put_line(vabc); --输出一个文本框输入的变量
select sal into vsal from emp where empno = 7654; --将查询到的sal内容存入vsal并输出
dbms_output.put_line(vsal);
select * into vrow from emp where empno = 7654; --将查询到的一行内容存入vrow并输出
dbms_output.put_line(vrow.sal);
dbms_output.put_line(123); --输出一个整数
dbms_output.put_line(123.456); --输出一个小数
dbms_output.put_line('Hello,World'); --输出一个字符串
dbms_output.put_line('Hello'||',World'); --输出一个拼接的字符串,||拼接符Oracle特有
dbms_output.put_line(concat('Hello',',World')); --输出一个拼接的字符串,concat函数比较通用
end;
9.2.3、if判断
一、语法
if 条件1 then
elsif 条件2 then
else
end if;
二、演示
declare
age number := &age;
begin
if age < 18 then
dbms_output.put_line('小屁孩');
elsif age >= 18 and age <= 24 then
dbms_output.put_line('年轻人');
elsif age > 24 and age < 40 then
dbms_output.put_line('老司机');
else
dbms_output.put_line('老年人');
end if;
end;
9.2.4、while循环
一、语法
while 条件 loop
end loop;
二、演示
--输出1~10
declare
i number := 1;
begin
while i <= 10 loop
dbms_output.put_line(i);
i := i + 1;
end loop;
end;
9.2.5、for循环
一、语法
for 变量 in [reverse] 起始值..结束值 loop
end loop;
二、演示
--输出1~10
declare
begin
for i in reverse 1 .. 10 loop
dbms_output.put_line(i);
end loop;
end;
9.2.6、loop循环
一、语法
loop
exit when 条件
end loop;
二、演示
--输出1~10
declare
i number := 1;
begin
loop
exit when i > 10;
dbms_output.put_line(i);
i := i + 1;
end loop;
end;
9.2.7、意外
一、含义
意外是程序运行的过程发生的异常,相当于是Java中的异常
二、语法
declare
--声明变量
begin
--业务逻辑
exception
--处理异常
when 异常1 then
...
when 异常2 then
...
when others then
...处理其它异常
end;
三、分类
系统异常
zero_divide :除数为零异常
value_error :类型转换异常
no_data_found : 没有找到数据
too_many_rows : 查询出多行记录,但是赋值给了%rowtype一行数据变量
自定义异常
declare
--声明变量
异常名称 exception;
begin
--业务逻辑
if 触发条件 then
raise 异常名称; --抛出自定义的异常
exception
--处理异常
when 异常名称 then
dbms_output.put_line('输出了自定义异常');
when others then
dbms_output.put_line('输出了其它的异常');
end;
四、演示
1、内置系统异常
vi number;
vrow emp%rowtype;
begin
--以下四行对应四个异常,测试请依次放开
vi := 8/0;
--vi := 'aaa';
--select * into vrow from emp where empno = 1234567;
--select * into vrow from emp;
exception
when zero_divide then
dbms_output.put_line('发生除数为零异常');
when value_error then
dbms_output.put_line('发生类型转换异常');
when no_data_found then
dbms_output.put_line('没有找到数据异常');
when too_many_rows then
dbms_output.put_line('查询出多行记录,但是赋值给了%rowtype一行数据变量');
when others then
dbms_output.put_line('发生了其它的异常' || sqlerrm);
end;
2、抛出系统异常
--查询指定编号的员工,如果没有找到,则抛出系统异常
declare
--1.声明一个变量 %rowtype
vrow emp%rowtype;
begin
--查询员工信息,保存起来
select * into vrow from emp where empno = 8000;
--判断是否触发异常的条件
if vrow.sal is null then
--抛出系统异常
raise_application_error(-20001,'员工工资为空');
end if;
exception
when others then
dbms_output.put_line('输出了其它的异常' || sqlerrm);
end;
3、抛出自定义异常
--查询指定编号的员工,如果没有找到,则抛出自定义异常
declare
--1.声明一个变量 %rowtype
vrow emp%rowtype;
--2.声明一个自定义的异常
no_emp exception;
begin
--查询员工信息,保存起来
select * into vrow from emp where empno = 8000;
--判断是否触发异常的条件
if vrow.sal is null then
raise no_emp; --抛出自定义的异常
end if;
exception
when no_emp then
dbms_output.put_line('输出了自定义异常');
when others then
dbms_output.put_line('输出了其它的异常' || sqlerrm);
end;
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_38490457/article/details/107976731