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

一、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)、系统定义的异常


(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;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值