ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:24.06KB ,
资源ID:5010603      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5010603.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SQL存储过程快速入门.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

SQL存储过程快速入门.docx

1、SQL存储过程快速入门SQL存储过程快速入门存储过程介绍存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE中,若干个有联系的过程可以组合在一起构成程序包。 存储过程是利用SQL Server所提供的Transact-SQL语言所编写的程序。Transact-SQL语言是SQL Server提供专为设计数据库应用程序的语言,它是应用程序和SQL Server数据库间的主要程序式设计界面。它好比Oracle数据库系统中的PL-SQL和Informix的数据库系统结构中的Informix- 4GL语言。这类语言主要提供以下

2、功能,让用户可以设计出符合引用需求的程序: 1)、变量说明 2)、ANSI兼容的SQL命令(如Select,Update.) 3)、一般流程控制命令(ifelse、while.) 4)、内部函数 存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 存储过程可由应用程序通过一个调用来执行,而且允许用户声明变量 。同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。 二、使用存储过程有以下的优点:* 存储过程的能力大大增强了SQL语言的功能和灵活

3、性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的 运算。 * 可保证数据的安全性和完整性。 # 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。 # 通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。 * 在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。 * 可以降低网络的通信量。 * 使体现企业规则的运算程序放入数据库服务器中,以便: # 集中控制。 # 当企业规则发

4、生变化时在服务器中改变存储过程即可,无须修改任何应用程序。企业规则的特点是要经常变化,如果把体现企业规则的运算程序放入应用程序中,则当企业规则发生变化时,就需要修改应用程序工作量非常之大(修改、发行和安装应用程序)。如果把体现企业规则的运算放入存储过程中,则当企业规则发生变化时,只要修改存储过程就可以了,应用程序无须任何变化。 三、存储过程的种类:1) 系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作。 2) 本地存储过程:用户创建的存储过程是由用户创建并完成某一特定功能的存储过程,事实上一般所说的存储过程就是指本地存储过程。 3) 临时存储过程:分为两种存储过程:

5、一是本地临时存储过程,以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它; 二是全局临时存储过程,以两个井字号(#)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。 4) 远程存储过程:在SQL Server2005中,远程存储过程(Remote Stored Procedures)是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。 5) 扩展存储过程:

6、扩展存储过程(Extended Stored Procedures)是用户可以使用外部程序语言编写的存储过程,而且扩展存储过程的名称通常以xp_开头。 四、存储过程的书写格式:CREATE PROCEDURE 拥有者.存储过程名;程序编号 (参数#1,参数#1024) WITH RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION FOR REPLICATION AS 程序行 其中存储过程名不能超过128个字。每个存储过程中最多设定1024个参数 (SQL Server 7.0以上版本),参数的使用方法如下: 参数名 数据类型 VARYING =内定值

7、OUTPUT 每个参数名前要有一个“”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。 =内定值相当于我们在建立数据库时设定一个字段的默认值,这里是为这个参数设定默认值。OUTPUT是用来指定该参数是既有输入又有输出值的,也就是在调用了这个存储过程时,如果所指定的参数值是我们需要输入的参数,同时也需要在结果中输出的,则该项必须为OUTPUT,而如果只是做输出参数用,可以用CURSOR,同时在使用该参数时,必须指定VARYING和OUTPUT这两个语句。 例子: CREATE PROCEDURE order_tot_am

8、t o_id int, p_tot int output AS SELECT p_tot = sum(Unitprice*Quantity) FROM orderdetails WHERE ordered=o_id GO 例子说明: 该例子是建立一个简单的存储过程order_tot_amt,这个存储过程根据用户输入的定单ID号码(o_id),由定单明细表 (orderdetails)中计算该定单销售总额单价(Unitprice)*数量(Quantity),这一金额通过p_tot这一参数输出给调用这一存储过程的程序。 五、存储过程的常用格式:Create procedure procedue_n

9、ame parameter data_typeoutput withrecompile|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 b

10、ook 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 into book(编号,书名,价格) Values(param1,param2,param3) select param4=sum(价格) from book go 执行例子: declare total_price money exec i

11、nsert_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_

12、 产品编号 客户名 客户订金 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 Goo

13、d else print Fail go 六、编写对数据库访问的存储过程:数据库存储过程的实质就是部署在数据库端的一组定义代码以及SQL。将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。 利用SQL的语言可以编写对于数据库访问的存储过程,其语法如下: CREATE PROCEDURE procedure_name ;number parameter data_type VARYING = default OUTPUT ,.n WITH RECOMPILE | ENCR

14、YPTION | RECOMPILE, ENCRYPTION FOR REPLICATION AS sql_statement .n 内的内容是可选项,而()内的内容是必选项, 例:若用户想建立一个删除表tmp中的记录的存储过程Select_delete可写为: Create Proc select_del As Delete tmp 例:用户想查询tmp表中某年的数据的存储过程 create proc select_query year int as select * from tmp where year=year 在这里year是存储过程的参数 例:该存储过程是从某结点n开始找到最上层的

15、父亲结点,这种经常用到的过程可以由存储过程来担当,在网页中重复使用达到共享。 空:表示该结点为顶层结点 fjdid(父结点编号) 结点n 非空:表示该结点的父亲结点号 dwmc(单位名称) CREATE proc search_dwmc dwidold int,dwmcresult varchar(100) output as declare stop int declare result varchar(80) declare dwmc varchar(80) declare dwid int set nocount on set stop=1 set dwmc= select dwmc=d

16、wmc,dwid=convert(int,fjdid) from jtdw where id=dwidold set result=rtrim(dwmc) if dwid=0 set stop=0 while (stop=1) and (dwid0) begin set dwidold=dwid select dwmc=dwmc,dwid=convert(int,fjdid) from jtdw where id=dwidold if rowcount=0 set dwmc= else set result=dwmc+result if (dwid=0) or (rowcount=0) set

17、 stop=0 else continue end set dwmcresult=rtrim(result) 使用exec pro-name pram1 pram2. 七、在SQL Server中执行存储过程:sql语句执行的时候要先编译,然后执行。存储过程就是编译好了的一些sql语句。用的时候直接就可以用了。 在SQL Server的查询分析器中,输入以下代码: declare tot_amt int execute order_tot_amt 1,tot_amt output select tot_amt 以上代码是执行order_tot_amt这一存储过程,以计算出定单编号为1的定单销售

18、金额,我们定义tot_amt为输出参数,用来承接我们所要的结果。 存储过程具有以下特点: 1.具有立即访问数据库的能力; 2.是数据库服务器端的执行代码,在服务器执行操作时,减少网络通讯,提高执行效率。 3.保证数据库安全,自动完成提前设定的作业。 八、存储过程的缺点1:调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。 2:移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。 3:重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。

19、4: 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的。维护起来更加麻烦! 九、存储过程中临时表的创建问题(针对SQL2000/2OO5) 可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。 本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (#table_name)。 SQL 语句使用 CREATE TABLE 语句中为 table_name 指定的名称引用临时表: CREA

20、TE TABLE #MyTempTable (cola INT PRIMARY KEY) INSERT INTO #MyTempTable VALUES (1) 如果本地临时表由存储过程创建或由多个用户同时执行的应用程序创建,则 SQL Server 必须能够区分由不同用户创建的表。为此,SQL Server 在内部为每个本地临时表的表名追加一个数字后缀。存储在 tempdb 数据库的 sysobjects 表中的临时表,其全名由 CREATE TABLE 语句中指定的表名和系统生成的数字后缀组成。为了允许追加后缀,为本地临时表指定的表名 table_name 不能超过 116 个字符。 除非

21、使用 DROP TABLE 语句显式除去临时表,否则临时表将在退出其作用域时由系统自动除去: 当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表。 所有其它本地临时表在当前会话结束时自动除去。 全局临时表在创建此表的会话结束且其它任务停止对其引用时自动除去。任务与表之间的关联只在单个 Transact-SQL 语句的生存周期内保持。换言之,当创建全局临时表的会话结束时,最后一条引用此表的 Transact-SQL 语句完成后,将自动除去此表。 十、特殊的存储过程-触发器1.触发器的概念及作

22、用 触发器是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如Update、 Insert、 Delete 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。 触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能: (1) 强化约束(Enforce restriction) 触发器能够实现比CHECK 语句更为复杂的约束。 (2)

23、跟踪变化Auditing changes 触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。 (3) 级联运行(Cascaded operation)。 触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。 (4) 存储过程的调用(Stored procedure invocation)。 为了响应数据库更新,触发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS( 数据库管理系统)本身之外进行操作。 由此可见,触发器可以解决高级

24、形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(Insert、 Update、 Delete)的多个触发器能够对同一种数据操作采取多种不同的处理。 总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。 2.触发器的种类 SQL Server 2000 支持两种类型的触发器:AFTER 触发器和INS

25、TEAD OF 触发器。其中AFTER 触发器即为SQL Server 2000 版本以前所介绍的触发器。该类型触发器要求只有执行某一操作(Insert Update Delete) 之后,触发器才被触发,且只能在表上定义。可以为针对表的同一操作定义多个触发器。对于AFTER 触发器,可以定义哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder 来完成此任务。 INSTEAD OF 触发器表示并不执行其所定义的操作(Insert、 Update、 Delete),而仅是执行触发器本身。既可在表上定义INSTEAD OF 触发器,也可以在视图上定义INS

26、TEAD OF 触发器,但对同一操作只能定义一个INSTEAD OF 触发器。 十一、Oracle中的存储过程:11.创建过程与其它的数据库系统一样,Oracle的存储过程是用PL/SQL语言编写的能完成一定处理功能的存储在数据库字典中的程序。 语法: create or replace procedure procedure_name (argment in| in out type, argment in | out | in out type is | as ( 注: 不用 declare 语句 ) Begin exception end; 1.1 这里的IN表示向存储过程传递参数,OU

27、T表示从存储过程返回参数。而IN OUT 表示传递参数和返回参数; 1.2 在存储过程内的参数只能指定参数类型;不能指定长度; 1.3 在AS或IS 后声明要用到的变量名称和变量类型及长度; 1.4 在AS或IS 后声明变量不要加declare 语句。 2.使用过程存储过程建立完成后,只要通过授权,用户就可以在SQLPLUS 、Oracle开发工具或第三方开发工具来调用运行。Oracle 使用EXECUTE 语句来实现对存储过程的调用。 语法: EXECUTE procedure_name( parameter1, parameter2); 3.开发过程目前的几大数据库厂商提供的编写存储过程的

28、工具都没有统一,虽然它们的编写风格有些相似,但由于没有标准,所以各家的开发调试过程也不一样。下面编写PL/SQL存储过程、函数、包及触发器的步骤如下: 3.1 编辑存储过程源码使用文字编辑处理软件编辑存储过程源码,要用类似WORD 文字处理软件进行编辑时,要将源码存为文本格式。 3.2 对存储过程程序进行解释在SQLPLUS或用调试工具将 存储过程程序进行解释; 在SQL下调试,可用start 或get 等Oracle命令来启动解释。如: SQLstart c:stat1.sql 如果使用调试工具,可直接编辑和点击相应的按钮即可生成存储过程。1 3.3 调试源码直到正确我们不能保证所写的存储过

29、程达到一次就正确。所以这里的调试是每个程序员必须进行的工作之一。在SQLPLUS下来调试主要用的方法是: 1使用 SHOW ERROR命令来提示源码的错误位置; 2使用 USER_ERRORS 数据字典来查看各存储过程的错误位置。 3.4 授权执行权给相关的用户或角色如果调试正确的存储过程没有进行授权,那就只有建立者本人才可以运行。所以作为应用系统的一部分的存储过程也必须进行授权才能达到要求。 在SQLPLUS下可以用GRANT命令来进行存储过程的运行授权。 语法: GRANT system_privilege | role TO user | role | PUBLIC WITH ADMIN OPTION 或 GRANT object_privilege | ALL

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1