存储过程是将sql和流程控制编程语句结合在一起,使得其可以将复杂的业务逻辑封装在一起,仅对外暴露参数即可。我们可以将存储过程类比为函数。
接下来我们一起来学习下如何在Oracle上创建存储过程。
首先我们建一张样表:
create table TEACHER( TNO VARCHAR2(10) not null, TNAME VARCHAR2(20))
接下来我们分析下存储过程的语法:
定义:CREATE [OR REPLACE] PROCEDURE [(参数列表)] IS[局部变量声明] BEGIN 可执行语句EXCEPTION 异常处理语句 END [];
其中中括号里面的内容为可选选项。学过Java的同学都知道,这语法结构是不是和java的函数有点类似。参数,处理逻辑,异常机制。
接下来我们来实战下:
任务:写一个存储过程,往TEACHER表 插入张老师的信息。
create or replace procedure insert_teacher isbegin insert into teacher values('t005','振华'); commit; dbms_output.put_line('插入新纪录成功!');end insert_teacher;
其中 dbms_output.put_line() 为Oracle的输出语句,类似于java的System.out.println()语句。
commit为事务的提交,因为Oracle的插入操作先是将数据保存在缓存区中,提交后才插入数据库。
将以上存储过程执行一遍:
注意,重点来了。我们执行了存储过程,显示的是编译compiled successfully 即编译成功。既然是编译,那就是没有执行。我们去对应的表中查看下有没有数据就知道了。
select * from teacher
可以看到空空如也!
所以这里要强调一个知识点:存储过程是已经被编译好的代码,在调用或引用时,只需传入参数,无参可不传,所以其执行效率非常高。
接下来我们演示下执行以及查看下执行效果。
我们打开SQL Plus,在windows左侧的oracle目录路径下即可找到
输入执行命令:
exec insert_teacher
箭头指向的“插入新记录成功“ 就是我们的dbms_output.put_line()语句。但是我们必须开启记录打印,不然它是默认不显示的。
set serverout on
执行上诉语句,日志记录就会输出了。
现在我们来看下数据库的记录有没有插入
select * from teacher
可以看到已经有一条我们插入的记录了。大功告成!
接下来我们总结下:
要点:因为存储过程是已经被编译好的代码,在调用或引用时,其执行效率非常高。
语法:
CREATE [OR REPLACE] PROCEDURE [(参数列表)] IS [局部变量声明] BEGIN 可执行语句 EXCEPTION 异常处理语句 END [];
欲穷千里目,更上一层楼!祝大家学业有成!
领取专属 10元无门槛券
私享最新 技术干货