Oracle学习笔记 -- day07 PL/SQL基本语法之变量、常量、游标、异常

时间:2021-06-18 14:42:26

一、PL/SQL语言的语法

1、基本语法结构

[declare]   --声明 
--可以在此声明 变量 常量 游标 异常
begin
--逻辑处理语句
[exception]
--异常处理语句 try catch
end;

2、变量和常量

:=    在PL/SQL中就是赋值的意思

%type    引用型变量,v_sal emp.sal%type; 意思是引用emp表中sal字段的数据类型给v_sal 这个变量      

=     在PL/SQL中就相当于java中的 ==,是用来进行判断的

dbms_output.put_line(要打印的变量);    打印数据

%rowtype;    记录型变量,v_row emp%rowtype; 即将emp中的某一条数据,放入变量v_row中,此时变量可以使用.字段名,来进行查询数据

constant    常量 相当于Java final

-------声明变量和常量
declare
--java private int age=1;
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、if 分支

(1)、第一种语法

if 条件 then

    逻辑处理语句

end if

(2)、第二种语法

if 条件 then

    逻辑处理语句

else

    逻辑处理语句

end if;

(3)、第三种语法

if 条件 then

    逻辑处理语句

elsif 条件 then

    逻辑处理语句

elsif 条件 then

    逻辑处理语句

...........    

else

    逻辑处理语句

end if

(4)、示例:输入一个年龄数据,如果小于18,打印“未成年人”,18到60 成年人,60以上 老年人

declare
v_age number(4):=&sjdj;
begin
if v_age<18 then
dbms_output.put_line('未成年人');
elsif v_age>=18 and v_age<=60 then
dbms_output.put_line('成年人');
else
dbms_output.put_line('老年人');
end if;
end;

二、循环

1、无条件循环(常用)

语法:

        loop

             循环的内容 

        end loop;

示例:打印1到100个数

declare
v_num number:=1;
begin
loop
--if v_num>100 then
-- exit;
--end if;
exit when v_num>100;
dbms_output.put_line(v_num);
v_num:=v_num+1;
end loop;
end;

2、有条件循环

语法:

        while 条件

        loop 

             循环的内容

        end loop;

示例:

declare
v_num number:=1;
begin
while v_num<=200
loop
dbms_output.put_line(v_num);
v_num:=v_num+1;
end loop;
end;

3、for循环

语法:

        for 变量名 in 起始值 .. 终止值

            loop

                 循环的内容

            end loop;

示例:

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、示例:打印所有员工的信息

declare
cursor c_emp is select * from emp;
v_row emp%rowtype;
begin
open c_emp;
loop
fetch c_emp into v_row;
exit when c_emp%notfound;
dbms_output.put_line(v_row.ename||'---'||v_row.job);
end loop;
close c_emp;
end;

5、示例:打印指定部门的员工的信息

declare
cursor c_emp(v_no number) is select * from emp where deptno=v_no;
v_row emp%rowtype;
begin
open c_emp(10);
loop
fetch c_emp into v_row;
exit when c_emp%notfound;
dbms_output.put_line(v_row.ename||'---'||v_row.job);
end loop;
close c_emp;
end;

四、异常

1、异常的作用

增强代码的容错性和健壮性

2、预定义异常

(1)、系统定义的异常

Oracle学习笔记 -- day07 PL/SQL基本语法之变量、常量、游标、异常

(2)、代码示例

declare
v_num number(6):=9;
v_name varchar2(1);
begin
--v_num:=1/0; -- ZERO_DIVIDE
v_name:='simth'; --VALUE_ERROR
exception
when ZERO_DIVIDE then -- 使用 when 捕获异常,使用 then 对异常进行处理,ZERO_DIVIDE是发生的异常类型
v_num:=0;
dbms_output.put_line(v_num);
-- when VALUE_ERROR then
when others then -- others相当于java中的Exception,即others代表了所有异常
v_name:='s';
dbms_output.put_line(v_name);
end;

3、自定义异常

--输入一个年龄,如果年龄超过150,抛异常“年龄太大,请检查数据”
declare
v_age number:=&age;
exc_age exception; --异常的声明方式,exc_age为异常名称
begin
if v_age >150 then
raise exc_age; -- 抛出异常使用raise关键词,相当于java中的throw
end if;
-- 以下
exception
when exc_age then
-- dbms_output.put_line('年龄太大,请检查数据');'
--错误窗口的弹出 oracle中 -20001至-29999 可以使用
raise_application_error(-20001,'年龄太大,请检查数据');
end;