(ORACLE)PL/SQL 编程

标识符的规范

1、定义变量,用v_作为前缀

2、定义常量,用c_作为前缀

3、定义游标,用_cursor作为后缀

4、定义列外,用e_作为前缀

块(block)

PL\SQL的程序基本单元

编写PL\SQL程序,其实就是在编写PL\SQL块,要完成相对简单的功能。可能只需要编写一个PL\SQL快;但要想实现复杂的功能,可能需要在一个PL\SQL块中嵌套其他的PL\SQL块。

块的分类

1、过程(存储过程)

2、函数

3、触发器

4、包

块的结构

PL\SQL块是由三个部分组成的

1、定义部分

declare 定义常量,变量,游标,列外,复杂数据类型

2、执行部分

begin 执行PL\SQL语句和SQL语句

3、列外处理部分

exception 处理运行的各种错误

end;

定义部分是从declear开始的,这部分是可选的

执行部分是从begin开始的e,这部分是必选的

处理部分是从exception开始的,这部分也是可选的

declare
begin
	内容
end;

例1、执行部分的块

在这里插入图片描述

例2、定义和执行部分的块

在这里插入图片描述

在这里插入图片描述

如果需要赋值多个变量名,多个变量名与字段之间,用‘,’号分隔开

(这里有个坑,例3讲)

在这里插入图片描述

例3、定义块部分,执行块部分,列外处理部分

例2中如果输入的值,没有找到对应的数据,程序会抛出异常,这里就需要用到列外处理部分(异常处理)

在这里插入图片描述

过程

过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in)也,可以指定输出参数(out)。通过在过程中使用输出参数,可以将数据传递到执行部分;通过使用输出参数,可以将执行部分的数据,传递到应用环境中。可以使用create procedure 命令来建立过程

创建存储过程

在这里插入图片描述

遍写一个过程,根据员工姓名,修改员工工资

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

使用java调用存储过程

在这里插入图片描述

函数

函数是用于返回特定的数据,在建立函数的时候,函数头部必须包含return子句,在函数体内必须包含return语句的返回数据,我们可以使用cerate function 来建立函数。

创建函数

在这里插入图片描述

使用SQL PULS调用函数

在这里插入图片描述
在这里插入图片描述

包是用于在逻辑上组合过程和函数,他是有包规范和包体两部分组成

1、使用create package is 命令来创建包

创建的包里只有声明的过程和函数,没有具体的实现过程

在这里插入图片描述

2、使用 create package body 包名 is 来创建包体

用来实现刚才创建的包内的过程和函数的具体实现步骤

在这里插入图片描述

调用包中的过程

使用exec 包名.过程名调用

在这里插入图片描述

触发器

触发器是指隐含执行的存储过程,当定义出发器时,必须要指定触发器的事件和触发的操作,常用的触发事件包括insert,update,delete语句,而触发操作,实际上就是一个pl/sql块可以使用create trigger 来创建触发器

变量的类型

1、标量类型 scalar

2、复合类型composite

3、参照类型reference

4、lob(large object)

标量(scalar)

在定义好变量后,就可以使用的变量。使用:=赋值。

存放单个数据。

输入员工的编号,查询姓名,工资 和税后工资

在这里插入图片描述

标量(scalar)%type类型

根据列的类型,来确定变量的类型和长度

使用方法:

标识符名 表名.列名%type;

在这里插入图片描述

复合变量(composite)

用于存放多个值的变量,主要包括这几种

PL/SQL记录

PL/SQL表

嵌套表

varray(变长数组)

复合类型-PL/SQL --记录–

类似于java当中的类

把A对象中的元素,筛选出自己需要的元素,创建一个B对象,根据筛选条件,从A对象中筛选元素相应的值,同时在B对象的元素中体现。

在这里插入图片描述

复合类型-PL/SQL --表–

相当于java中的数组

java中的数组下标不能为负数,PL/SQL表的下标是可以为负数的,并且表元素的小标没有限制

在这里插入图片描述

参照变量

参照变量是指存放数值指针的变量,通过使用参照变量可以使应用程序共享相同的对象,从而降低占用的空间,在编写PL/SQL程序时,可以使用游标变量(ref cursor)和对象类型变量(ref obj_type)两种参照类型变量

游标变量(ref cursor)

使用游标时,当定义游标时不需要指定相应的select语句,但是当使用游标时(open时)需要指定select语句,这样一个select语句就和一个游标结合了

编写一个PL/SQL块,可以输入部门号,显示该部门所有员工姓名和他的工资

在这里插入图片描述

PL/SQL 控制结构

条件分支语句

1、if—then

2、if—then—else

3、if—then—elsif—else

判断全部完成后使用end if 结束判断

————————————

1、简单条件判断

if—then—

编写一个过程,输入员工姓名,如果工资低于2000,工资上涨10%

在这里插入图片描述

2、二重条件分支

if—then—else—

输入员工姓名,如果补助不为0,将补助在原有的基础上加100,如果补助为0,就把补助设为200

3、多重条件分支

if—then—elsif—else

输入员工编号,如果职位是president 就给他工资加1000,如果职位是manager加500,其他职位加200

在这里插入图片描述

循环语句

loop

loop是PL/SQL中最简单的循环语句,以loop开头,end loop结尾,

这种循环至少会被执行一次

exit when后面跟退出循环的条件

写一个过程,输入一个用户名,在用户表中循环添加10次

在这里插入图片描述
在这里插入图片描述

while循环

当条件为ture时,执行循环体的语句

以while。条件。loop开始

end loop结束

使用while循环 写一个过程,输入一个用户名,在用户表中循环添加10次

在这里插入图片描述

for循环

基本for循环

控制变量 i 在隐含中不停增加

在这里插入图片描述

java程序调用 有返回值的存储过程

输入员工编号,返回员工的姓名

在这里插入图片描述

在这里插入图片描述

Java程序 调用返回多个参数的存储过程

在这里插入图片描述

在这里插入图片描述

返回结果集的存储过程

输入部门号,返回该部门所有雇员的信息

由于oracle 存储过程没有返回值,他的所有参数都是通过out参数来代替,所以要用到列表,由于是集合,所以这里要用-包-package

1、创建一个包,定义一个游标,再创建一个返回多条结果的存储过程

在这里插入图片描述

2、使用Java程序调用存储过程

存储过程返回的是 游标cursor 说明返回的是多条结果,每一条结果都是一个object对象,在使用ResultSet接收的时候需要向下转型

在这里插入图片描述

分页过程

分页模板

使用rownum字段,查询emp表中 3-5条记录

select * from (select t1.*,rownum rn from (select * from emp) t1 where rownum <=5) where rn between 3 and 5;

1、在包中先创建游标

在这里插入图片描述

2、编写一个存储过程,传入三个参数分别是 表名,查询页数,和每页显示的数据数量;返回三个参数,分别是,分页页数,查询到信息的总数,每页显示的具体信息。

在这里插入图片描述
在这里插入图片描述

3、在java中调用存储过程,查找自己想要的数据

在这里插入图片描述
在这里插入图片描述

例外处理(异常处理)

Oracle将例外分为

1、预定义例外

       用于处理常见的Oracle错误

2、非预定义例外

       用于处理预定义例外不能处理的错误

3、和自定例外

      用于处理和Oracle错误无关的其他情况

处理预定义例外

预定义例外是由pl/sql所提供的系统例外,当pl/sql应用程序违反了oracle规定的限制是,则会隐含的触发一个内部列外。pl/sql为开发人员提供了二十多个预定义例外。

case not found

cursor_already_open

dup_val_on_index

invaild_cursor

invaild_number

在这里插入图片描述

自定义例外

由开发人员自己定义的例外

编写一个pl/sql块 接收一个雇员编号,并给该雇员工资增加1000元,如果该雇员不存在,给出提示

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/NONAME999/article/details/85110909