栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

oracle 快速入门之第四章 PLSQL编程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

oracle 快速入门之第四章 PLSQL编程

一:PLSQL基本概念: 1.PL:过程语言:类似Java语言的风格,可以在Oracle工具中打印输出,定义变量,
           顺序结构,选择结构,循环结构,游标,函数,同义词,存储过程,触发器等等
2.SQL:结构化查询语言
      数据定义语言|数据控制语言|事务控制语言|数据操纵语言
3.PL/SQL编程:是过程语言与结构化查询语言的结合。  4.PLSQL(Procedure Language/SQL)是Oracle对sql语言的过程化扩展,在SQL的命令语言中增加了过程处理语句,如分支,循环等,使SQL语言有过程处理能力 注意:SQL语言能实现的,PL/SQL也可以实现

二:PLSQL的组成部分:

工具PLSQL Developer 的Test Window创建模板或者在SQL Window编写,在PLSQL中是不区分大小写的

3个部分:声明部分,可执行代码块部分,异常处理部分
其中可执行代码块部分是必须的,其它2个部分可以不写。
语法:
       declare
           ① 变量名 数据类型;--变量声明;
       begin--可执行部分的开始
          ②  逻辑代码;
         end;--可执行部分的结束
         
         ③异常处理部分

PL/SQL打印输出

Java打印输出

System.out.println("123");

oracle打印输出

begin
  dbms_output.put_line('我是Oracle打印输出的结果');
  end;

注意事项:PL/SQL编程中的语句必须放入begin...end语句块中

PL/SQL变量的使用

定义一个变量保存一个姓名,然后打印输出

declare
  myname varchar2(100);
  begin
    --赋值   :=
    myname:='刘邦';
    dbms_output.put_line('myname = '||myname);
    end;

SQL语言能实现的操作PL/SQL也能实现

查询7369的薪资  通过SQL语言实现

select sal from emp where empno = 7369;

重点:从某张表中查询到指定的结果然后into(赋值)给指定的变量名
语法:select ....into.....    

通过PL/SQL编程查找7369的薪资   控制台打印输出

declare
--声明一个变量保存查找的薪资
 mysal number;
begin
  select sal into mysal from emp where empno = 7369;
  --打印输出
  dbms_output.put_line('薪水为: '||mysal);
  end;
 在使用变量的同时可以合二为一
declare
 myempno number:=7369;
 mysal number;
begin
  select sal into mysal from emp where empno = myempno;
  --打印输出
  dbms_output.put_line('薪水为: '||mysal);
  end;

oracle中的输入器   &

查找指定编号的薪资

declare
myempno number(10):='&输入员工编号';--编号
mysal number(20);
begin
  select sal into mysal from emp where empno = myempno;
  dbms_output.put_line(mysal);
  end;
三:PL/SQL编程中的数据类型
    标量类型:number,varchar2,date,boolean 大数据类型:LOB   存储二进制文件(图片,视频等等) 属性类型:   %type   %rowtype 

%type 引用指定表中的指定字段的类型 %rowtype  引用指定表中的指定行的类型(类似java的对象)

查找7369的薪水,薪水类型不确定

declare
myempno emp.empno%type:=7369;--假设empno是number类型  emp.empno%type = number
mysal emp.sal%type;
begin
  select sal into mysal from emp where empno = myempno;
  dbms_output.put_line(mysal);
  end;

查找7499的所有信息

declare
myempno emp.empno%type:=7499;
--根据行类型来定义一行的记录对象
myemp emp%rowtype;
begin
  select * into myemp from emp where empno = myempno;
  dbms_output.put_line(myemp.empno||'   '||myemp.ename||'   '||myemp.sal);
  end;

四:oracle中的选择结构:
    if结构   case结构

定义一个变量保存一个数字,判断这个数字是否为偶数

declare
mynum number(10):='&请输入一个数字';
begin
  if (mod(mynum,2) = 0) then
    dbms_output.put_line('偶数');
    else
      dbms_output.put_line('奇数');
      end if;--结束if语句
  end;

大于3000 交税  等于3000继续努力   小于3000 回家挖田

select ename,decode(sign(sal - 3000),'1','交税','-1','回家挖田','0','继续努力')
from emp;

通过IF实现  判断7369处于哪个级别

declare
myempno emp.empno%type:=7369;
mysal emp.sal%type;
begin
  select sal into mysal from emp where empno = myempno;
  --判断
  if (mysal > 3000) then
    dbms_output.put_line('交税');
    elsif (mysal = 3000) then
    dbms_output.put_line('继续努力');
    elsif (mysal < 3000) then
    dbms_output.put_line('回家挖田');
    end if;
  end;

case的使用

begin
  case '&请输入'
    when 'A' then dbms_output.put_line('优秀');
    when 'B' then dbms_output.put_line('良好');
    when 'C' then dbms_output.put_line('一般');
    when 'D' then dbms_output.put_line('low');
    else
      dbms_output.put_line('鬼');
    end case;
  end;
五:PL/SQL循环结构: 
     loop  

loop循环 (涉及到嵌套需要命名  结束循环)

    while

 while(true){} 

    for

 for...in

注意:loop循环 (涉及到嵌套需要命名  结束循环)

打印输出1-100

declare
mynum number(20):=1;
begin
  loop
    dbms_output.put_line(mynum);
    --递增+1
    mynum:=mynum+1;
    --满足条件就结束
    exit when mynum = 101;
    end loop;
end;
declare
mynum number(20):=0;
begin
  loop
    
    dbms_output.put_line(mynum);
    --满足条件就结束
    exit when mynum = 100;
    --递增+1
    mynum:=mynum+2;
    
    end loop;
end;

1-100的和

declare
mynum number(10):=1;
mysum number(10):=0;
begin
  <>
  loop
      mysum:=mysum+mynum;
      mynum:=mynum+1;
      exit myloop when mynum = 101;
    end loop;
    dbms_output.put_line(mysum);
  end;

1-100的偶数和

declare
mynum number(10):=1;
mysum number(10):=0;
begin
  <>
  loop
    if (mod(mynum,2) = 0) then
      mysum:=mysum+mynum;
      end if;
      mynum:=mynum+1;
      exit myloop when mynum = 101;
    end loop;
    dbms_output.put_line(mysum);
  end;

使用while循环输出1-100

declare
mynum number(10):=1;
begin
  while (mynum <= 100) loop
    dbms_output.put_line(mynum);
    mynum:=mynum + 1;
    end loop;
end;

使用for循环输出1-100的和

begin
  for i in 1..100 loop
     dbms_output.put_line(i);
    end loop;
  end;
declare
mysum number(10):=0;
begin
  for i in 1..100 loop
    if(mod(i,2)=0) then
    mysum:=mysum+i;
    end if;
    end loop;
    dbms_output.put_line(mysum);
  end;

六:异常处理 异常(Exception)处理:当给定的语句执行后,如果找不到数据或者结果以预期的结果不匹配(行数)
plsql中提供了2中预设义异常:数据未找到异常,行太多异常
1.数据未找到异常(no_data_found):提供的字段在数据表中查找不到
2.行太多异常(too_many_rows):匹配的结果过多。
3.try...catch(){}

打印输出250的薪水

declare
myempno emp.empno%type:=250;
mysal emp.sal%type;
begin
  select sal into mysal from emp where empno = myempno;
  dbms_output.put_line(mysal);
  --异常处理部分
  exception
    when no_data_found then
      dbms_output.put_line('提供的编号不存在');
  end;
declare
mysal emp.sal%type;
begin
  select sal into mysal from emp;
  dbms_output.put_line(mysal);
  --异常处理部分
  exception
    when too_many_rows then
      dbms_output.put_line('行太多异常');
  end;

同时处理多个异常

declare
mysal emp.sal%type;
begin
  select sal into mysal from emp;
  dbms_output.put_line(mysal);
  --异常处理部分
  exception
    when too_many_rows then
      dbms_output.put_line('行太多异常');

    when no_data_found then
      dbms_output.put_line('提供的编号不存在');
  end;

重点:

自定义异常     exception  定义异常   raise  抛出异常

步骤
1.声明      异常名称  exception;
2.抛出       raise 异常名称;
3.捕捉      excetpion when 异常名称 then  输出异常结果提示;

判断一个年龄是否在指定的区间(18-36)

declare
myAgeException exception; --自己定义异常
myAge number(20):=45;
begin
  if (myAge < 20 or myAge > 36) then
    raise myAgeException;
    else
      dbms_output.put_line('年龄为: '||myAge);
    end if;
    --捕捉异常
    exception
      when myAgeException then
         dbms_output.put_line('年龄不在指定的范围内');
  end;
七:函数

函数就是方法   方法就是函数
方法的核心:封装代码,方便调用

    语法: create [or replace] function 函数名称[(参数1,参数2,....)] return 结果类型 is|as 声明部分不需要使用declare去定义 begin   语句块;   end;

封装求和的方法  1-10  1-100  1-1000

create or replace function returnSum(mynum number)
return number is
mysum number:=0;--保存和
begin
  for i in 1..mynum loop
    mysum:=mysum+i;
    end loop;
   return mysum;
  end;

--调用
select returnSum(100) from dual;

封装一个函数  根据指定的编号查找对应的工资

create or replace function getSalByEmpno(myempno emp.empno%type)
return emp.sal%type is
mysal emp.sal%type;
begin
  select sal into mysal from emp where empno = myempno;
  return mysal;
  end;


--调用
select getSalByEmpno(7369) from dual;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781157.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号