oracle存储过程、包、游标 小解

存储过程(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/sqlend 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程序中调用它。
先就此搁笔,过一两天再完成剩余部分。

猜你喜欢

转载自blog.csdn.net/Ldabaicai/article/details/52636156