PL/SQL

目录

一,PL/SQL概述

二,变量和常量

1.变量

 2.常量

3.变量和常量的区别

三,%type和%rowtype 

1.%type

2.%rowtype

四, 控制结构

1.条件控制语句

1.1 if语句

1.2 case语句

2.循环控制语句

2.1 loop循环

2.2 while循环 

2.3 for循环

五,异常处理

1.预定义异常/系统自带异常

1.1 too_many_rows

1.2 no_data_found

 2.自定义异常

六,自定义函数


一,PL/SQL概述

  • PL/SQL是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言(过程化SQL语言);

  • PL/SQL是Oracle对SQL语言的扩展,扩展部分内容:变量常量存储过程、程序包、游标函数触发器条件控制循环控制等;

  • PL/SQL与Oracle服务器和Oracle工具紧密集成,具备可移植性、灵活性和安全性;

  • PL/SQL语法特点:PL/SQL程序都是以块(block)为基本单位,整个PL/SQL块分三部分:声明部分(用declare开头)、执行部分(以 begin开头,以end结尾)和异常处理部分(以Exception开头)。其中执行部分是必须的,其他两个部分可选。无论PL/SQL程序段的代码量有多大,其基本结构就是由这三部分组成。

  

二,变量和常量

1.变量

语法结构

        declare

                变量名 数据类型;

        begin        

                执行代码块内容;   

        end

赋值方式

  • 方式一:":="

  • 方式二:"select into 语句"

  

 2.常量

语法结构

        decare

                变量名1 constant 数据类型 := 值;

        begin

                执行代码块内容;

        end

3.变量和常量的区别

  • 常量声明的时候要在数据类型前面加 constant 关键字,表示常量的意思;

  • 常量必须初始值,且值不能被修改;

 

三,%type和%rowtype 

1.%type

  • 作用:用来引用数据表里面某个字段的数据类型;

    • 通俗解释:当我们想要声明一个变量来保存表内某个字段值但是又不知道该变量用什么数据类型的时候,我们就可以引用表内该字段的数据类型来作为变量的数据类型。

  • 案例演示:根据员工编号查询出员工的姓名和入职日期。

declare

sid number(7) :=7499;

sname varchar2(10);

mydate emp.hiredate%type;--通过%type引用 emp 表里面 hiredate 字段的数据类型。

begin

       select ename,hiredate into sname,mydate from emp

       whereempno=sid;

       dbms_output.put_line('名字是:'||sname||',入职日期是:'||mydate);

end;

 

2.%rowtype

  • 作用:可以声明一个基于表的行对象,也称为记录对象。

  • 案例:根据员工编号查询出名字和岗位(用一个变量保存)。

declare

sid number :=7499;

mysum emp%rowtype;

begin

       select * into mysum from emp where empno=sid;

       dbms_output.put_line('名字是:'||mysum.ename||',岗位是:'||mysum.job);

end;

 

四, 控制结构

1.条件控制语句

1.1 if语句

if(条件1) then

        条件1成立执行代码块

elsif(条件2) then

        条件2成立执行代码块

.......

else

        以上条件都不成立执行代码块

end if;

1.2 case语句

begin

        case '&变量'

                when '值1' then 执行代码块1;

                when '值2' then 执行代码块2;

                when '值3' then 执行代码块3;

                when '值4' then 执行代码块4;

                ..............

                else 当以上值都不满足的时候执行代码块

        end case;

end;

  • "&":作用相等于Java里面的Scanner;

 

2.循环控制语句

2.1 loop循环

  • 案例1:输出1-100之间所有数字;

declare

i number:=0;

begin

<<aloop>>                              --给loop循环取别名:aloop

        loop

           dbms_output.put_line(i);     --输出每一个值

           i:=i+1;                                   --i的值在叠加

   exit aloop when i=101;        --当i等于100的时候aloop循环退出 

       end loop;

end;

 

2.2 while循环 

  • 案例:求1-100之间的和。

declare

i number(8):=0;

mysum number(8):=0;

begin

      while(i<=100) loop

            mysum:=mysum+i;

            i:=i+1;

      end loop;

      dbms_output.put_line(mysum); --循环完成后输出最终求的和

end;

 

2.3 for循环

  • 案例:求1-100之间的和。 

mysum number(7):=0;

begin

      for i in 1..100 loop   

          mysum:=mysum+i;

      end loop;

      dbms_output.put_line(mysum);

end;

五,异常处理

1.预定义异常/系统自带异常

1.1 too_many_rows

  • too_many_rows:行太多。意为:实际返回的行数超出请求的行数。

declare

sid number:=7499;

mysum emp%rowtype;

begin

  select * into mysum from emp;

  dbms_output.put_line('名字是:'||mysum.ename||',岗位是:'||mysum.job);

  exception when too_many_rows then

            dbms_output.put_line('太多行');

end;

 

1.2 no_data_found

  •  no_data_found:行太少。意为:未查询到数据。

declare

sid number:=0;

mysum emp%rowtype;

begin

  select * into mysum from emp where empno=sid;

  dbms_output.put_line('名字是:'||mysum.ename||',岗位是:'||mysum.job);

  exception when no_data_found then

            dbms_output.put_line('行太少');

end;

 2.自定义异常

  • 语法:

declare

  异常变量 exception;

  begin

    if(触发异常条件) then

       raise 异常变量;    

    else

      未触发异常执行的代码块

    end if;

    exception when 异常变量 then

             触发异常执行的代码块

  end;

 

六,自定义函数

  • 语法结构 

create [or replace] function 函数名 (参数1,参数2)

return 返回值类型  is|as   

定义返回变量(要取长度);

begin

  函数要执行的sql语句

  return 变量名;          

end;


 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值