oracle_day04_pl/sql语法

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;

猜你喜欢

转载自blog.csdn.net/qq_35537301/article/details/83718763