存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
前言:很多人都说存储过程过时了,学这玩意没啥用,你去外面面试的时候根本就不怎么需要使用。其实我觉得呢,技术没有过不过时的,只要能为你的项目提供解决方案那就是有用的技术,技术不能一直追求新,学技术又不是攀比,觉得知道了几个新名词就很牛逼,其实不然。
公司一个项目里需要用到存储过程,而我正好又负责这一模块,所以就需要开始学习存储过程等知识。对我而言,普通的sql语句是能看懂能写出来的,对于存储过程的认识也只是停留在知道存储过程也是由sql语句组成,仅此而已。对于同事说保存在数据库中的Sql语句,就显得更迷茫了。怎么保存的,保存在哪个地方,怎么找到,怎么使用,java程序又是怎么调用的……等等一系列的问题出现在我的脑袋里。
下图是pl/sql developer中存储过程,存储函数等保存的结构位置:
存储过程格式:
create or replace procedure procedure_name (Name1 in type,Name2 out type) --定义了一个输入变量和一个输出变量
as
--此处可定义变量
begin
--pl/sql体
end procedure_name;
包头格式:
--包头中只声明定义,不写具体逻辑代码,等在包体中实现
create or replace package package_name as
--定义一个游标类型
type t_cursor is ref cursor;
--声明一个存储过程,我这里是带参数的,不带参数直接不写括号内的即可
procedure procedure_name(a in number,b out t_cursor);
end package_name;
包体格式:
--包体需要实现包头中声明的所有的方法
create or replace package body package_name as
procedure procedure_name(a in number,b out t_cursor) as
begin
--因为b 是一个游标类型,使用之前请open一下它
open b for select * from emp where userno = a;
end procedure_name;
end package_name;
写好了包头包体之后,保存并编译它。然后在java程序中调用它。
先就此搁笔,过一两天再完成剩余部分。