标识符的规范
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中调用存储过程,查找自己想要的数据