码迷,mamicode.com
首页 > 数据库 > 详细

【Oracle】存储过程之完整篇

时间:2018-09-15 18:47:17      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:一个   测试   other   eve   plsql   parameter   ddr   idt   roi   

1.语法

create [or replace] procedure pro_name[(parameter1,parameter2,...)] is|as
begin
  plsql_sentences;
[exception]
  [dowith_sentences;]
end pro_name;
参数说明:

pro_name:存储过程名称

parameter1:参数

plsql_sentences:PL/SQL语句,它是存储过程功能实现的主体。

dowith_sentences:异常处理语句,也是PL/SQL语句。

上面的parameter1指的是存储过程被调用时候用的参数,内部变量需要在is|as关键字后边定义,并使用;号结束

2.环境准备

2.1 创建表TMP001

字段 描述 类型
id 客户编号 int
name 客户名称 varchar2(100)
gender 客户性别 varchar2(2)
age 客户年龄 int
address 客户地址 varchar2(200)

脚本:

create table TMP001(
id int not null,
name varchar2(100),
gender varchar2(2),
age int,
address varchar2(200)
)

 

3.具体案例

3.1创建一个简单存储过程,往表TMP001插入一条记录

/********************************************************
功能名称:用于简单存储过程测试
用途   :插入一条记录到TMP001表中

参数列表
---------------------------------------------------------
参数    IN/OUT   类型    描述
---------------------------------------------------------
无
---------------------------------------------------------

版本号:1.0 
---------------------------------------------------------
作者:Qinys
日期:20180915
说明:创建
---------------------------------------------------------
---------------------------------------------------------
********************************************************/
create or replace procedure proInsertTmp001 is
begin
  insert into TMP001 values(1,张三,,29,云南省昆明市);
  commit;
  dbms_output.put_line(插入记录成功!);
end proInsertTmp001;

上述存储过程放在PL/SQL Developer中编译通过后,即可调用查看结果

调用存储过程

①execute命令调用:execute  proInsertTmp001

技术分享图片

②使用PL/SQL块

begin

  proInsertTmp001;

end;

技术分享图片

 

3.2声明一个带IN模式的存储过程

/**********************************************************************
功能名称:用于测试带IN的存储过程
用途   :插入一条记录到TMP001表中

参数列表
参数列表
-----------------------------------------------------------------------
参数          IN/OUT   类型         描述
-----------------------------------------------------------------------
int_id        IN       INT          客户编号    
var_name      IN       VARCHAR2     客户名称
var_gender    IN       VARCHAR2     客户性别
int_age       IN       INT          客户年龄
var_address   IN       VARCHAR2     客户地址
-----------------------------------------------------------------------

版本号:1.0 
-----------------------------------------------------------------------
作者:Qinys
日期:20180915
说明:创建
-----------------------------------------------------------------------
-----------------------------------------------------------------------
**********************************************************************/
create or replace procedure proInsertTmp002( 
                                            int_id in int,
                                            var_name in varchar2,
                                            var_gender in varchar2,
                                            int_age in  int,
                                            var_address in  varchar2
                                           ) is
begin
  insert into TMP001 values(int_id,var_name,var_gender,int_age,var_address);
  commit;
  dbms_output.put_line(插入记录成功!);
end proInsertTmp002;

调用存储过程

技术分享图片

查看结果

技术分享图片

3.3 声明一个带OUT模式的存储过程

/**********************************************************************
功能名称:用于测试带OUT的存储过程
用途   :调用存储过程,并返回调用结果

参数列表
-----------------------------------------------------------------------
参数          IN/OUT   类型         描述
-----------------------------------------------------------------------
int_id        IN       INT          客户编号    
var_name      IN       VARCHAR2     客户名称
var_gender    IN       VARCHAR2     客户性别
int_age       IN       INT          客户年龄 默认值为:18
var_address   IN       VARCHAR2     客户地址 默认值为:China
flag          OUT      VARCHAR2     1-成功 0-失败
msg           OUT      VARCHAR2     返回错误代码
-----------------------------------------------------------------------

版本号:1.0 
-----------------------------------------------------------------------
作者:Qinys
日期:20180915
说明:创建
-----------------------------------------------------------------------
-----------------------------------------------------------------------
**********************************************************************/
create or replace procedure proInsertTmp004( 
                                            int_id     in int,
                                            var_name   in varchar2,
                                            var_gender in varchar2,
                                            int_age    in int default 18,
                                            var_address in varchar2 default China,
                                            flag out varchar2,
                                            msg  out varchar2 
                                           ) is
begin
  proInsertTmp003(int_id,var_name,var_gender,int_age,var_address);
  commit;
  --主体程序运行完毕
  flag :=1;
--异常处理
exception
  when others then 
    rollback;
  flag :=0;
  msg :=错误原因|| sqlcode || , || sqlerrm(sqlcode);   
end proInsertTmp004;

我们正常调用存储过程proInsertTmp004

技术分享图片

在output可以看到结果

技术分享图片

非正常调用

技术分享图片

output结果

技术分享图片

 

3.4创建带有默认值的存储过程

/**********************************************************************
功能名称:用于测试带默认值的存储过程
用途   :插入一条记录到TMP001表中

参数列表
-----------------------------------------------------------------------
参数          IN/OUT   类型         描述
-----------------------------------------------------------------------
int_id        IN       INT          客户编号    
var_name      IN       VARCHAR2     客户名称
var_gender    IN       VARCHAR2     客户性别
int_age       IN       INT          客户年龄 默认值为:18
var_address   IN       VARCHAR2     客户地址 默认值为:China
-----------------------------------------------------------------------

版本号:1.0 
-----------------------------------------------------------------------
作者:Qinys
日期:20180915
说明:创建
-----------------------------------------------------------------------
-----------------------------------------------------------------------
**********************************************************************/
create or replace procedure proInsertTmp003( 
                                            int_id in int,
                                            var_name in varchar2,
                                            var_gender in varchar2,
                                            int_age in int default 18,
                                            var_address in varchar2 default China
                                           ) is
begin
  insert into TMP001 values(int_id,var_name,var_gender,int_age,var_address);
  commit;
  dbms_output.put_line(插入记录成功!);
end proInsertTmp003;

调用存储过程

此处指传入前三个参数

技术分享图片

 

 

4.存储过程调用传递参数

4.1使用指定名称传递的方式传递参数

4.1.1 语法

pro_name(parameter1=>value1[,parameter1=>value1]…)

4.1.2 例子

技术分享图片

我们从数据库的得知,确实已经插入,并且字段顺序没变

技术分享图片

 

4.2使用按位置的方式传递参数

4.2.1 语法

此种传递是我们最常用的,也就是值与参数一一对应

4.2.2 例子

见具体案例3.2中的调用存储过程

 

4.3使用按位置的方式传递参数

4.3.1 语法

上述两种传递方式混合起来,但是在某个位置使用“指定名称传递”之后,后边的参数值必须使用指定名称传递,因为参数的原始定义顺序可能已经被破坏

4.3.2 例子

技术分享图片

【Oracle】存储过程之完整篇

标签:一个   测试   other   eve   plsql   parameter   ddr   idt   roi   

原文地址:https://www.cnblogs.com/OliverQin/p/9651754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!