存储过程懂不懂

存储过程的官方定义是这么说的:

 

 

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。


 

其实说的再简单一点,她就是一个过程而已,对!就是和你所熟知的那个Sub……End Sub实质上是一个东西。

 

 

存储过程除了与一般的过程拥有同样的优点外(多次调用,可移植性好等),还在一定程度上减少了网络流量(只需要传送调用过程的语句);而且通过对执行存储过程的权限控制还能保证系统数据的安全等等,等等。

 

 

简而言之,使用存储过程存在很多好处,但是却没有明显的坏处。

 

 

OK!铺垫完毕,开始正式介绍——存储过程。(这里应该有掌声)

 

 

l  基本语法格式

 

 

n  创建存储过程

 

 

   1: create proc 过程名/*建立存储过程*/
   2: @parameter 参数类型  /*输入参数*/
   3: ...
   4: @parameter 参数类型  output/*输出参数*/
   5: ...
   6: as
   7: begin
   8:     命令行或命令块/*需要存储过程执行的操作*/
   9: end

n  执行存储过程

   1: execute 过程名 [参数,参数……][output] 

n  修改存储过程

 

 

   1: alter proc 过程名*/修改存储过程*/
   2: @parameter 参数类型  /*输入参数*/
   3: ...
   4: @parameter 参数类型  ouput/*输出参数*/
   5: ...
   6: as
   7: begin
   8:    命令行货命令块/*存储过程执行的操作*/
   9: End

n  重命名存储过程

   1: sp_rename 原过程名,新过程名

n  删除存储过程

   1: drop proc存储过程名,[存储过程名2,……]

l  存储过程在哪里?

 

 

无论是系统自带的存储过程(在数据库master中,以sp_开头)还是自定义的存储过程,都在相应数据库中的“可编译性”——“存储过程”中,可以点击查看。

 

 

PS:修改、重命名、删除存储过程也可以在相应数据库中的“可编译性”——“存储过程”中右键进行相应相关操作(看个人喜好)。

 

 

l  实战演练

 

 

1.       建立数据库(略)

 

 

文章末尾附数据对应脚本,执行即可。image

2.       建立无参数存储过程

 

 

   1: create proc proc1
   2: as 
   3: begin
   4:    select a.StuNo,StuName,StuCollege,StuScore from Student a
   5:    where StuScore >90
   6: end

3.  建立有参数存储过程

 

 

   1: CREATE proc proc2
   2: @coures varchar(20)
   3: as 
   4: begin
   5:    select StuNo,StuName,StuCollege,StuScore from Student a
   6:    where StuScore=@Coures
   7: end

4.  执行存储过程

 

 

   1: execute proc1
   2: execute proc2 '80'

如图所示image

附:对应数据脚本

   1: USE [StuInfo]
   2: GO
   3: SET ANSI_NULLS ON
   4: GO
   5: SET QUOTED_IDENTIFIER ON
   6: GO
   7: SET ANSI_PADDING ON
   8: GO
   9: CREATE TABLE [dbo].[Student](
  10:        [StuNo] [varchar](50) NULL,
  11:        [StuName] [varchar](50) NULL,
  12:        [StuCollege] [varchar](50) NULL,
  13:        [StuScore] [varchar](50) NULL
  14: ) ON [PRIMARY]
  15: GO
  16: SET ANSI_PADDING OFF
  17: GO
  18: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'1', N'丁福东', N'物电学院', N'80')
  19: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'2', N'斯蒂芬', N'物电学院', N'75')
  20: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'3', N'梵蒂冈', N'数信学院', N'98')
  21: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'4', N'金凯华', N'国贸学院', N'69')
  22: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'5', N'安淑霞', N'数信学院', N'78')
  23: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'6', N'张成栋', N'生科学院', N'84')
  24: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'7', N'安世伟', N'国贸学院', N'95')
  25: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'8', N'任文才', N'生科学院', N'71')
  26: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'9', N'秦福德', N'物电学院', N'54')
  27: INSERT [dbo].[Student] ([StuNo], [StuName], [StuCollege], [StuScore]) VALUES (N'10', N'孙德荣', N'生科学院', N'68')
  • 0
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 35
    评论
### 回答1: 使用MyBatis调用Oracle存储过程可以按照以下步骤进行: 1. 在mapper XML 文件中定义存储过程的调用语句,可以使用 select、update、insert 等标签,如: ``` <select id="callProcedure" statementType="CALLABLE"> {call PROCEDURE_NAME(#{param1,mode=IN,jdbcType=VARCHAR},#{param2,mode=OUT,jdbcType=CURSOR,resultMap=RESULT_MAP})} </select> ``` 其中,PROCEDURE_NAME 为存储过程的名称,param1 和 param2 分别为输入参数和输出参数的名称,RESULT_MAP 是输出结果集的映射关系。 2. 在代码中调用 mapper 方法,如: ``` MyMapper mapper = sqlSession.getMapper(MyMapper.class); Map<String, Object> params = new HashMap<String, Object>(); params.put("param1", "input_value"); mapper.callProcedure(params); List<ResultType> results = (List<ResultType>)params.get("param2"); ``` 其中,MyMapper 为 mapper 的接口类,sqlSession 是 MyBatis 的会话对象,params 是参数 Map 对象,ResultType 是输出结果集的类型。调用 mapper 方法后,会将参数传入存储过程,执行存储过程,并将输出结果集放入 params 对象的 param2 属性中,最后通过 params.get("param2") 可以获取输出结果集。 ### 回答2: 在MyBatis中调用Oracle存储过程需要以下步骤: 1. 在Oracle数据库中创建存储过程。示例如下: CREATE OR REPLACE PROCEDURE my_proc (param1 IN VARCHAR2, param2 OUT VARCHAR2) AS BEGIN -- 存储过程的逻辑代码 -- 可以使用IN参数param1进行操作 -- 将OUT参数param2赋值 END; 2. 在MyBatis的Mapper XML文件中编写调用存储过程的代码。示例如下: <insert id="callMyProc" statementType="CALLABLE"> {call my_proc(#{param1}, #{param2, mode=OUT, jdbcType=VARCHAR})} </insert> 3. 在Java代码中调用Mapper中的方法。示例如下: String param1 = "value1"; String param2; MyMapper mapper = sqlSession.getMapper(MyMapper.class); mapper.callMyProc(param1, param2); System.out.println("param2: " + param2); 在上述代码中,param1为传入存储过程的参数值,param2为输出参数。通过调用Mapper中的方法,将param1传入存储过程,并将结果赋值给param2。 其中,CALLABLE为MyBatis的一个特殊语句类型,用于调用存储过程或函数。#{param1}和#{param2}用于替换存储过程中的参数。 需要注意的是,通过Mapper调用存储过程后,param2的值会被存储过程赋值。在上述示例中,可以通过System.out.println打印param2的值。 以上就是在MyBatis中调用Oracle存储过程的简单示例代码。根据实际业务需求,可以调整参数和存储过程的逻辑。 ### 回答3: 使用MyBatis调用Oracle存储过程需要按照下面的步骤进行操作: 1. 创建存储过程:首先在Oracle数据库中创建存储过程,定义好输入参数、输出参数以及存储过程的逻辑。 2. 在MyBatis的Mapper文件中编写调用存储过程的代码: - 在Mapper文件的命名空间中引入Oracle存储过程的标识符: ``` <mapper namespace="com.example.mapper.MyMapper"> <package name="oracle"/> </mapper> ``` - 编写调用存储过程的代码: ``` <select id="callProcedure" statementType="CALLABLE"> {call PROCEDURE_NAME(#{param1, mode=IN}, #{param2, mode=OUT, jdbcType=VARCHAR})} </select> ``` 其中,`PROCEDURE_NAME`是存储过程的名称,`param1`和`param2`分别是存储过程的输入参数和输出参数。设置`mode=IN`表示输入参数,`mode=OUT`表示输出参数,使用`jdbcType=VARCHAR`指定输出参数的类型。 3. 在Java代码中调用Mapper接口方法: ``` @Autowired private MyMapper myMapper; public void callProcedure() { String inputParam = "input"; Map<String, Object> outputParam = new HashMap<>(); outputParam.put("param2", null); myMapper.callProcedure(inputParam, outputParam); String outputValue = (String) outputParam.get("param2"); System.out.println("Output Parameter: " + outputValue); } ``` 在调用存储过程的方法中,传入输入参数的值和一个Map用于接收输出参数的值。在方法执行后,可以从Map中取得输出参数的值。 注意:在进行存储过程调用时,需要确保MyBatis的配置中启用了对Oracle存储过程的支持。 这是使用MyBatis调用Oracle存储过程的基本步骤,根据具体需求和存储过程的不同,代码可能会有所变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值