Oracle存储过程在实际数据库开发过程当中会经常使用到,作为一个数据库开发者必备的技能,它有着SQL语句不可替代的作用。所谓存储过程,就是一段存储在数据库中执行某块业务功能的程序模块。它是由一段或者多段的PL/SQL代码块或者SQL语句组成的一系列代码块。
创建Oracle存储过程语法:
create [or replace] procedure 过程名
( p1 in|out datatype,
p2 in|out datatype,
...
pn in|out datatype
) is
....--声明部分
begin
....--过程体
end;
语法解析:
1、procedure 关键字是创建存储过程的命令。
2、create [or replace] :如果存储过程已经存在则覆盖替代原有的过程。
3、in|out :存储过程具有入参和出参两种参数选择,in表示的是入参,out表示的是出参,在使用过程的时候,入参必须得有对应的变量传入,出参得有对应的变量接收。
4、datatype表示出入参变量对应的数据类型。
5、is后面跟着的是过程当中使用到的声明变量。
6、begin...end 中间编写的就是存储过程的具体操作。
创建操作表
create table TEST
(
id NUMBER(14),
username VARCHAR2(255),
password VARCHAR2(255),
createdate DATE default sysdate,
state CHAR(2)
);
创建无参数存储过程
create or replace procedure testprocedure --创建或修改存储过程,存储过程名为testprocedure
as
atotal number(10); --创建一个数字类型的变量atotal
begin --存储过程开始
select count(*) into atotal from base.TEST; --把count计数出来的数量 通过into赋值给atotal变量
DBMS_OUTPUT.put_line('总数'||atotal); --数据库输出数量
end testprocedure; --存储过程结束
存储过程的执行
--执行存储过程方法1::call
call testprocedure();
--执行存储过程方法2:begin end
begin
testprocedure();
end;
创建有参数存储过程
--创建或修改存储过程,存储过程名为findclass,输入参数为classId,输出className
create or replace procedure testprocedure(uid in int,username out varchar2)
as
--存储过程开始
begin
--把查询出来的class_name 赋值给输出变量className,查询条件为classId
select username into username from base.TEST where id = uid;
--数据库输出数量,这句输出只是方便测试,真正输出的值是out的值
DBMS_OUTPUT.put_line('姓名:'||username);
--存储过程结束
end testprocedure;