- 定义:
将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
讲到这里,可能有人要问:这么说存储过程就是一堆SQL语句而已啊?
Microsoft公司为什么还要添加这个技术呢?
那么存储过程与一般的SQL语句有什么区别呢? - 存储过程的优点:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量
4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权 - 存储过程的种类:
1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,
如 sp_help就是取得指定对象的相关信息
2.扩展存储过程 以XP_开头,用来调用操作系统提供的功能
exec master..xp_cmdshell 'ping 10.8.16.1'
3.用户自定义的存储过程,这是我们所指的存储过程
常用格式
Create procedure procedue_name
[@parameter data_type][output]
[with]{recompile|encryption}
as
sql_statement
解释:
output:表示此参数是可传回的
with {recompile|encryption}
recompile:表示每次执行此存储过程时都重新编译一次
encryption:所创建的存储过程的内容会被加密
如:
表book的内容如下
编号 书名 价格
001 C语言入门 $30
002 PowerBuilder报表开发 $52
实例1:查询表Book的内容的存储过程
create proc query_book
as
select * from book
go
exec query_book
实例2:加入一笔记录到表book,并查询此表中所有书籍的总金额
Create proc insert_book
@param1 char(10),@param2 varchar(20),@param3 money,@param4 money output
with encryption ---------加密
as
insert book(编号,书名,价格) Values(@param1,@param2,@param3)
select @param4=sum(价格) from book
go
执行例子:
declare @total_price money
exec insert_book '003','Delphi 控件开发指南',$100,@total_price
print '总金额为'+convert(varchar,@total_price)
go
存储过程的3种传回值:
1.以Return传回整数
2.以output格式传回参数
3.Recordset
传回值的区别:
output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中
实例3:设有两个表为Product,Order,其表内容如下:
Product
产品编号 产品名称 客户订数
001 钢笔 30
002 毛笔 50
003 铅笔 100
order
产品编号 客户名 客户订金
001 南山区 $30
002 罗湖区 $50
003 宝安区 $4
请实现按编号为连接条件,将两个表连接成一个临时表,该表只含编号.产品名.客户名.订金.总金额,
总金额=订金*订数,临时表放在存储过程中
代码如下:
Create proc temp_sale
as
select a.产品编号,a.产品名称,b.客户名,b.客户订金,a.客户订数* b.客户订金 as总金额
into #temptable from Product a inner join order b on a.产品编号=b.产品编号
if @@error=0
print 'Good'
else
print 'Fail'
go - 基本语法
1.基本结构
CREATE OR REPLACE PROCEDURE 存储过程名字
(
参数1 IN NUMBER,
参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGINEND 存储过程名字
2.SELECT INTO STATEMENT
将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...
3.IF 判断
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
4.while 循环
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;
5.变量赋值
V_TEST := 123;
6.用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;
7.带参数的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(变量值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT WHEN FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;
8.用pl/sql developer debug
连接数据库后建立一个Test WINDOW
在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试
相关推荐
MySQL存储过程深度教程
在MySQL中,创建存储过程的基本语句是。紧跟其后的是存储过程的名称和一系列参数,最后是存储过程的SQL语句体。下面是一个简单的存储过程定义的格式:BEGIN-- SQL语句集END这里的INOUT和INOUT关键字分别表示参数的输入、输出或输入输出模式。在存储过程中,IN参数是最常见的参数类型,它允许将一个值传递给存储过程。这种参数用于那些在存储过程中需要使用的值,但不需要修改它们的情况。定义IN参数时,需要在存储过程的定义中声明参数名和数据类型。BEGINEND;
Innodb锁机制
InnoDB实现了两种类型的行锁。共享锁(S):允许一个事务去读一行,阻止其他事务获得相同的数据集的排他锁。排他锁(X):允许获得排他锁的事务更新数据,但是组织其他事务获得相同数据集的共享锁和排他锁。可以这么理解:共享锁就是我读的时候,你可以读,但是不能写。排他锁就是我写的时候,你不能读也不能写。其实就是MyISAM的读锁和写锁,但是针对的对象不同了而已。...
MySQL存储过程实战教程
存储过程是一组为了完成特定功能的SQL语句集,预编译后存储在数据库中。它们可以接受输入参数并可选地返回输出参数和结果集。存储过程的存在主要是为了提高执行效率、增强数据处理能力以及提供更高的封装性。存储过程是一组为了完成特定功能的SQL语句集,它被定义在数据库中,可以通过指定的名称来调用执行。在创建存储过程时,它通常包含以下几个基本组成部分:过程名称:唯一标识存储过程的名称。参数列表。
plsql保存修改后的存储过程( ORACLE)
打开plsql找到左菜单栏object下procedures里所要修改的存储过程 编辑储存过程 点击F8进行编译保存就可以了
SQL Server存储过程高级应用教程
SQL Server存储过程是存储在数据库中的一段预编译的T-SQL代码,它能够执行特定的数据库操作或任务。存储过程可以被调用多次,而且由于它们在数据库服务器端预编译,所以能够提高数据库操作的效率。存储过程是存储在数据库中的一组为了完成特定功能的SQL语句集合。它们可以接受输入参数、执行逻辑,并将结果返回给调用者。
EBS开发_创建AP付款
--以下代码于20181002在Tony环境测试通过 /* BEGIN --mo_global.init('SQLAP'); apps.fnd_global.apps_initialize(user_id => 1110, resp_id => 50597, resp_appl_id => 20003); --mo_global.set_policy_context(...
存储过程教程
存储过程教程(一) 在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。SQLServer 2000 不仅提供了用户自定义存储过程的功能,而且也提供了许多可作为工具使用的系统存储过程。12.1.1 存储
用R语言实现“中断时间序列分析” --- R code for ITS
ITS方法可用于评估一项干预措施的效果,从水平改变和斜率改变两个角度来描述干预引起的变化。
Oracle存储过程-入门教程
存储过程 目录 一.什么是存储过程 二.为什么要写存储过程 三.存储过程基础 1.存储过程结构 2.存储过程语法 3.pl/sql处理存储过程 四.存储过程进阶 1.BUIK COLLECT 2.FORALL 3.pl/sql调试存储过程 4.案例实战 附.参考资料 一.什么是存储过程 存储过程,百度百科上是这样解释的,存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQ
V-rep机器人仿真(Win10):UR5+RG2+Kinect+YOLOV3+DDPG+Pytorch(第四部分:YOLOV3图像识别)
这是一个V-rep机器人仿真实验,较为简单,适合初学者在入门图像识别、机器学习、机器人学的内容时进行学习与训练。 实验涉及的内容有:V-rep机器人仿真,YOLOV3图像识别,强化学习DDPG,UR5机械臂及RG2机械手,Kinect摄像头。 使用环境:Win10,Pytorch0.4,V-rep 整个实验一共由多篇文章组成,本文是第四部分。 第四部分:YOLOV3图像识别 文章目录第四部分:YO...
windows中如何将已安装的nodejs高版本降级为低版本
第一步:先清空本地安装的node.js版本 1.按健win+R弹出窗口,键盘输入cmd,然后敲回车(或者鼠标直接点击电脑左面最左下角的win窗口图标弹出,输入cmd再点击回车键) 然后进入命令控制行窗口,并输入where node查看之前本地安装的node的路径 2.找到上面找到的路径,将node.exe所在的父目录里面的所有东西都删除 3.为了彻底删除之前安装的node.js,鼠标点击电脑左面最左下角的win窗口图标弹出,输入“控制面板”再点击回车键进入,进入控制面板后,找到所安装的node.js并
【Mysql专题】存储过程介绍及其基本操作
存储过程是一组为了完成特定功能的 SQL 语句集合。使用存储过程的目的是将常用或复杂的工作预先用 SQL 语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程。当以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用“CALL存储过程名字”即可自动完成。(对应的就是Java里面的函数)
1、Ovirt 开源虚拟化平台安装
Ovirt虚拟化Node和Engine安装
oracle的存储过程菜鸟教程,SQL菜鸟入门级教程之存储过程
SQL菜鸟入门级教程之存储过程今天继续我们的SQL菜鸟教程,博客说了说触发器(),今天我们来说说存储过程。其实,触发器也属于存储过程,只不过它比较特殊。下面切入正题,让我带领众菜鸟们一起学习一下存储过程。存储过程简介 存储过程(Stored Procedure)SQL菜鸟入门级教程之存储过程今天继续我们的SQL菜鸟教程,博客说了说触发器(),今天我们来说说存储过程。其实,触发器也属于存储过程,只不...
SPME/IP PPT详解
什么是中间件?它是操作系统与应用程序之间的一块代码,它对于应用程序提供了一些标准接口,屏蔽了应用程序与底层的一些交互,上层应用程序只要和中间件进行交互就可以了,这样就可以达到一个解耦的目的。SOMEIP其实是一个中间件,它是操作系统与应用程序之间的一段代码,它是可以运行在TCP/IP之上的,可以在很多平台上使用,可以适配较多的操作系统,可以提供很多接口。经过序列化之后,在网络上传输的是一些101010这样的二进制流。SOME/IP可以承接应用层的一些数据,进行打包放到传输层。
计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题
计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题
MySQL存储过程--菜鸟教程
文章目录1. MySQL存储过程 1. MySQL存储过程 菜鸟教程
从 SAP Gateway 旧 add-ons 卸载到 SAP S/4HANA 转换的清理路线
摘要: SAP Gateway系统的维护难点往往源于历史遗留组件的堆积,而非OData服务本身的复杂性。早期系统为支持多种服务类型而安装的各类add-ons(如IW_SCS、IW_CNT、GW_CORE等),随着系统升级和团队更替逐渐成为技术负债。自SAP NetWeaver 7.40起,核心功能已整合至SAP_GWFND组件,使架构显著简化。在向S/4HANA迁移时,需重点清理已废弃的add-ons(如IW_SCS、IW_GIL等),但必须谨慎验证其关联服务是否仍被调用。组件清理需结合系统日志和调用链分析
MySQL存储过程示例教程
MySQL存储过程的示例教程,包含基础语法和实际案例演示
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
MySQL存储过程教程
在本节中,您将逐步学习如何在MySQL中开发存储过程。 首先,我们向您介绍存储过程概念,并讨论何时应该使用它。然后,我们向您演示如何使用过程代码的基本元素,例如:创建存储过程,if-else语句,case语句,循环语句,存储过程的参数。下面的每个教程都包含了易于理解的示例和详细的解释。 如果您认真学习了所有的教程,那么您能够比较容易地在MySQL中开发简单到复杂的存储过程了。 MySQL存储过程简...
Outlook Express 6 (OE6) for Win7/Win8/Win10
英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。
mysql存储过程菜鸟教程_菜鸟从零学习数据库(三)——存储过程
今天继续我们的SQL菜鸟教程,上篇博客说了说触发器(SQL菜鸟入门级教程之触发器),今天我们来说说存储过程。其实,触发器也属于存储过程,只不过它比较特殊。下面切入正题,让我带领众菜鸟们一起学习一下存储过程。存储过程简介存储过程(Stored Procedure)是数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数...
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
mysql存储过程怎么加日志_mysql存储过程的使用教程
mysql存储过程的使用教程希望这本书能像内行专家那样与您进行对话,用简单的问题、例子让你学到需要的知识。为了达到这样的目的,我会从每一个细节开始慢慢的为大家建立概念,最后会给大家展示较大的实用例,在学习之前也许大家会认为这个用例很难,但是只要跟着课程去学,相信很快就能掌握。Conventions and Styles 约定和编程风格每次我想要演示实际代码时,我会对mysql客户端的屏幕就出现的代...
简单教程,存储过程在企业级开发中的应用
给大家分享一个简单的,但是也挺实用的教程。有时候,大家看到一个教程,它难,就觉得它是好的。反之,如果教程较为简单,则就是不好的。这是一种偏见,是不对的。嗯..打个比喻。好像现在王者荣耀里的英雄,有些英雄非常吃操作,有些英雄上去一直按攻击键就非常强。那么,吃操作的英雄,即便操作的好,就一定强吗?也不见得吧。所以,一个教程的好坏,不取决于它的难度,它是其本身,和适用性。拿我们今天的教程来说,它浅显易懂...
MySQL 基础教程:视图与存储过程
本教程系统介绍MySQL中视图和存储过程的使用方法。视图是基于SQL查询的动态虚拟表,可通过CREATE VIEW创建、ALTER VIEW修改和DROP VIEW删除,简化复杂查询复用。存储过程使用CREATE PROCEDURE定义,支持参数化调用,能封装业务逻辑并提升安全性,通过CALL执行、DROP PROCEDURE删除。两者都能提高代码复用性和执行效率:视图适用于简化查询,存储过程适合处理复杂业务逻辑。教程提供创建语法示例和使用建议,帮助开发者优化数据库设计。
mysql存储过程教程_MySQL存储过程教程
mysql存储过程教程 1.简介 在企业级应用程序中,始终需要定期对数据库执行某些特定的任务集,例如数据库清理,处理工资单,创建具有多个默认条目以及更多其他内容的新实体。 这样的任务可能涉及对每个任务执行多个查询。 如果有一种方法可以将这些任务分组为一个任务并执行,则可以简化此过程。 MySQL存储过程正是用于此目的。 MySQL存储过程是一段预编译SQL代码,可以执行这些代码以运行多个任务...
875



被折叠的 条评论
为什么被折叠?



