存储过程的典型例子

合集下载

存储过程实例讲解

存储过程实例讲解

存储过程实例讲解嘿,朋友们!今天咱就来讲讲这存储过程。

你说这存储过程啊,就像是一个魔法盒子,里面装满了各种奇妙的代码和逻辑。

想象一下,你有一堆复杂的任务,就像要组装一个超级复杂的模型,零件多得让你眼花缭乱。

这时候,存储过程就出现啦!它把这些零散的代码片段整合在一起,变成一个有组织、有纪律的团队。

比如说,在一个大型的数据库系统里,你可能需要经常执行一些特定的操作,比如查询某些数据、更新某些记录等等。

如果每次都要重新写那些代码,多麻烦呀!但是有了存储过程,就相当于你有了一个专门的工具,只要调用它就可以轻松完成这些任务啦。

它就像是一个经验丰富的大厨,各种食材在它手里就能变成美味佳肴。

它把那些复杂的逻辑和步骤都封装起来,让我们这些使用者不用再去头疼那些细节。

再打个比方,你要去一个很远的地方旅行,你可以选择自己一点点摸索路线,也可以直接找一个专业的导游。

存储过程就是那个导游呀,它熟悉路线,知道哪里有好玩的,哪里要注意。

而且哦,存储过程还很灵活呢!你可以根据自己的需求随时修改它,就像给那个魔法盒子重新布置里面的东西一样。

它能适应各种不同的情况,是不是很厉害?你看,在实际应用中,很多企业都会用到存储过程。

它能提高效率,让整个系统运行得更加顺畅。

就像一辆汽车,有了好的发动机,才能跑得更快更稳嘛。

比如说,在一个电商网站上,处理订单的过程就可以用存储过程来优化。

从下单到发货,这中间有好多步骤呢,要是没有存储过程来帮忙,那得多乱呀!还有啊,在金融系统里,存储过程也发挥着重要的作用。

各种交易的处理、数据的计算,都离不开它呢。

总之,存储过程就像是数据库世界里的一颗璀璨明星,照亮了我们前进的道路。

它让我们的编程工作变得更加轻松、高效,真的是太棒啦!大家可千万别小看它哦,好好去研究研究,你一定会发现它更多的神奇之处的!怎么样,是不是对存储过程有了更深的了解呢?还等什么,赶紧去试试吧!。

存储过程实例大全

存储过程实例大全

存储过程实例⼤全整理者为我实例1:只返回单⼀记录集的存储过程。

银⾏存款表(bankMoney)的内容如下Id userID Sex Money001Zhangsan男30002Wangwu男50003Zhangsan男40要求1:查询表bankMoney的内容的存储过程create procedure sp_query_bankMoneyasselect * from bankMoneygoexec sp_query_bankMoney注* 在使⽤过程中只需要把中的SQL语句替换为存储过程名,就可以了很⽅便吧!实例2(向存储过程中传递参数):加⼊⼀笔记录到表bankMoney,并查询此表中userID= Zhangsan的所有存款的总⾦额。

Create proc insert_bank @param1 char(10),@param2 varchar(20),@param3 varchar(20),@param4 int,@param5 int output with encryption ---------加密asinsert bankMoney (id,userID,sex,Money)Values(@param1,@param2,@param3, @param4)select @param5=sum(Money) from bankMoney where userID='Zhangsan'go在SQL Server查询分析器中执⾏该存储过程的⽅法是:declare @total_price intexec insert_bank '004','Zhangsan','男',100,@total_price outputprint '总余额为'+convert(varchar,@total_price)go在这⾥再啰嗦⼀下存储过程的3种传回值(⽅便正在看这个例⼦的朋友不⽤再去查看语法内容):1.以Return传回整数2.以output格式传回参数3.Recordset传回值的区别:output和return都可在批次程式中⽤变量接收,⽽recordset则传回到执⾏批次的客户端中。

oracle时间循环的存储过程范例

oracle时间循环的存储过程范例

oracle时间循环的存储过程范例Oracle是一种关系型数据库管理系统,它提供了丰富的功能和工具来处理和管理数据。

在Oracle中,存储过程是一种由SQL语句和PL/SQL代码组成的数据库对象,可以被存储在数据库中并在需要的时候被调用执行。

本文将以Oracle时间循环的存储过程为范例,介绍如何使用存储过程来处理时间循环相关的操作。

在许多应用场景中,需要对一段连续的时间范围进行操作和处理。

例如,统计某个时间段内的销售额、计算某个时间段内的平均值等等。

这时,使用时间循环的存储过程可以简化代码的编写,并提高程序的执行效率。

下面是一个示例的存储过程,用于计算某个时间段内的销售额:```sqlCREATE OR REPLACE PROCEDURE calculate_sales(start_date IN DATE,end_date IN DATE)IS-- 定义变量total_sales NUMBER := 0;current_date DATE := start_date;sales_amount NUMBER;BEGIN-- 循环计算销售额WHILE current_date <= end_dateLOOP-- 查询当天的销售额SELECT SUM(amount)INTO sales_amountFROM salesWHERE sales_date = current_date;-- 累加销售额total_sales := total_sales + sales_amount;-- 增加一天current_date := current_date + 1;END LOOP;-- 输出结果DBMS_OUTPUT.PUT_LINE('Total sales from ' || start_date || ' to ' || end_date || ' is ' || total_sales);END;/```以上存储过程接受两个日期参数,分别表示时间范围的起始日期和结束日期。

gp存储过程写法

gp存储过程写法

gp存储过程写法全文共四篇示例,供读者参考第一篇示例:存储过程(Stored Procedure)是一种在数据库中存储和执行的预编译的SQL代码,可以用于实现特定的功能或业务逻辑。

它们可以提高数据库的性能,减少网络流量,同时也可以简化客户端应用程序的开发过程。

在GP数据库中,存储过程是非常重要的,可以帮助我们更好地管理和维护数据库。

本文将介绍GP存储过程的写法,以及一些注意事项。

一、GP存储过程的语法在GP数据库中,我们可以使用T-SQL(Transact-SQL)语言编写存储过程。

一个基本的存储过程通常包含以下几个部分:1. 存储过程的名称:用于唯一标识存储过程的名称。

2. 参数列表:存储过程可以接受参数,可以是输入参数、输出参数或输入输出参数。

3. 存储过程体:包含实际的SQL代码,用于实现具体的功能。

4. 返回值:存储过程可以返回一个或多个值。

下面是一个简单的GP存储过程的示例:```sqlCREATE PROCEDURE usp_GetCustomerInfo@CustomerID INTASBEGINSELECT * FROM Customers WHERE CustomerID =@CustomerIDEND```以上示例是一个名为usp_GetCustomerInfo的存储过程,接受一个参数@CustomerID,然后根据该参数查询Customers表中的数据,并返回结果。

二、在GP中创建存储过程在GP中创建存储过程非常简单,可以通过SQL Server Management Studio或者GP提供的工具来实现。

下面是创建一个存储过程的简单步骤:1. 打开SQL Server Management Studio,连接到GP数据库。

2. 在“查询”窗口中输入存储过程的代码。

3. 按下F5键或者点击“执行”按钮,执行SQL语句,创建存储过程。

我们也可以在GP中使用存储过程向数据库中插入、更新、删除数据,或者执行复杂的逻辑操作。

oracle时间循环的存储过程范例

oracle时间循环的存储过程范例

oracle时间循环的存储过程范例Oracle是一款广泛使用的关系型数据库管理系统,它支持使用存储过程来实现复杂的业务逻辑。

本文将以一个时间循环的存储过程为例,介绍如何在Oracle中编写和使用存储过程。

在实际开发中,经常会遇到需要根据时间进行循环操作的场景,比如每天定时执行某个任务,或者按照特定的时间间隔重复执行某个操作。

使用存储过程可以将这些循环逻辑封装起来,提高代码的复用性和可维护性。

下面我们以一个简单的例子来说明如何使用Oracle存储过程实现时间循环。

假设我们需要每天定时向用户发送一封电子邮件,提醒他们当天的待办事项。

我们可以通过存储过程来实现这个功能。

我们需要创建一个存储过程来发送邮件。

在存储过程中,我们可以使用Oracle提供的时间函数来获取当前日期,并根据日期来查询当天的待办事项。

然后,我们可以使用邮件服务的API来发送邮件给用户。

下面是一个简化的示例代码:```sqlCREATE OR REPLACE PROCEDURE send_email ASv_today DATE;v_subject VARCHAR2(100);v_body VARCHAR2(1000);BEGIN-- 获取当前日期v_today := SYSDATE;-- 构造邮件主题和内容v_subject := '今日待办事项提醒';v_body := '尊敬的用户,以下是您今天的待办事项:';-- 查询当天的待办事项-- SELECT * FROM todo_list WHERE due_date = v_today;-- 发送邮件给用户-- email_service.send_email('****************',v_subject, v_body);-- 打印日志DBMS_OUTPUT.PUT_LINE('邮件发送成功!');END;/```在上面的代码中,我们首先声明了一些变量来存储当前日期、邮件主题和内容。

oracle 存储过程优秀例子

oracle 存储过程优秀例子

oracle 存储过程优秀例子Oracle存储过程是一种在数据库中存储并可以被重复调用的程序单元。

它可以用于实现复杂的业务逻辑,提高数据库的性能和安全性。

下面列举了十个优秀的Oracle存储过程例子。

1. 用户注册存储过程该存储过程可以用于用户注册过程的验证和处理。

它可以检查用户提交的信息是否有效,并将用户信息插入到用户表中。

如果有错误或重复信息,它会返回相应的错误消息。

2. 商品库存更新存储过程该存储过程用于处理商品出库和入库的操作。

它会更新商品表中的库存数量,并记录相应的操作日志。

如果库存不足或操作失败,它会返回错误消息。

3. 订单生成存储过程该存储过程用于生成订单并更新相关表的信息。

它可以检查订单的有效性,计算订单总金额,并将订单信息插入到订单表和订单明细表中。

如果有错误或重复订单,它会返回相应的错误消息。

4. 日志记录存储过程该存储过程用于记录系统的操作日志。

它可以根据传入的参数,将操作日志插入到日志表中,并记录操作的时间、操作人和操作内容。

这样可以方便后续的审计和故障排查。

5. 数据备份存储过程该存储过程用于定期备份数据库中的重要数据。

它可以根据预设的时间间隔,将指定表的数据导出到备份表中,并记录备份的时间和备份人。

这样可以保证数据的安全性和可恢复性。

6. 数据清理存储过程该存储过程用于定期清理数据库中的过期数据。

它可以根据预设的条件,删除指定表中的过期数据,并记录清理的时间和清理人。

这样可以减少数据库的存储空间和提高查询性能。

7. 权限管理存储过程该存储过程用于管理数据库中的用户权限。

它可以根据传入的参数,为指定用户或角色分配或撤销相应的权限。

同时,它可以记录权限的变更历史,以便审计和权限回溯。

8. 数据统计存储过程该存储过程用于统计数据库中的数据。

它可以根据预设的条件,查询指定表中的数据,并根据统计规则生成相应的统计报表。

这样可以方便用户对数据进行分析和决策。

9. 数据导入存储过程该存储过程用于将外部数据导入到数据库中。

简单统计报表例子(存储过程)

简单统计报表例子(存储过程)

简单统计报表例⼦(存储过程)1create or replace procedure bb_quxzbmjdqzxfqk_ces(kssj in date,2 jssj in date,3 wtsd2 varchar2,4 tjjg out sys_refcursor) as56begin7delete from A_TJBB_quxzbmjdqzxfqk;8commit;9insert into A_TJBB_quxzbmjdqzxfqk10select jj.iidd,jj.isedit,jj.djjgbh,jj.cfxfjbz,jj.lmbz,jj.xfrs,jj.xfxs from visit_xfj jj,11 hr_organization n where n.jglb='1200'and n.region_dm=wtsd2 and n.bh=jj.djjgbh and jj.djsj between kssj and jssj;12commit;13open tjjg for141516select l.mc as mc,17count(1) as jianci,18sum(case when xf.xfxs='100'then1else19case when xf.xfxs='200'then xf.xfrs else20case when xf.xfxs in ('300','303') then121else0end end end) as rci,22sum(case when xf.xfxs='100'and xf.lmbz='0'and xf.cfxfjbz='0'then1else0end)as grlx,23sum(case when xf.xfxs='100'and xf.lmbz='1'and xf.cfxfjbz='0'then1else0end)as lmx,24sum(case when xf.xfxs='100'and xf.lmbz='0'and xf.cfxfjbz='1'then1else0end)as cfgrlx,25sum(case when xf.xfxs='100'and xf.lmbz='1'and xf.cfxfjbz='1'then1else0end)as cflmx,26sum(case when xf.xfxs='100'then1else0end)as xiaojie,27sum(case when xf.xfxs='200'and xf.xfrs<=4and xf.cfxfjbz='0'then1else0end)as c1lfcjjc,28sum(case when xf.xfxs='200'and xf.xfrs<=4and xf.cfxfjbz='0'then xf.xfrs else0end)as c1lfcjrc,29sum(case when xf.xfxs='200'and( xf.xfrs>=5and xf.xfrs<=49) and xf.cfxfjbz='0'then1else0end)as c5lfcjjc,30sum(case when xf.xfxs='200'and( xf.xfrs>=5and xf.xfrs<=49) and xf.cfxfjbz='0'then xf.xfrs else0end)as c5lfcjrc,31sum(case when xf.xfxs='200'and( xf.xfrs>=50and xf.xfrs<=499) and xf.cfxfjbz='0'then1else0end)as c50lfcjjc,32sum(case when xf.xfxs='200'and( xf.xfrs>=50and xf.xfrs<=499) and xf.cfxfjbz='0'then xf.xfrs else0end)as c50lfcjrc,33sum(case when xf.xfxs='200'and xf.xfrs>=500and xf.cfxfjbz='0'then1else0end)as c500lfcjjc,34sum(case when xf.xfxs='200'and xf.xfrs>=500and xf.cfxfjbz='0'then xf.xfrs else0end)as c500lfcjrc,35sum(case when xf.xfxs='200'and xf.xfrs<=4and xf.cfxfjbz='1'then1else0end)as cf1lfcjjc,36sum(case when xf.xfxs='200'and xf.xfrs<=4and xf.cfxfjbz='1'then xf.xfrs else0end)as cf1lfcjrc,37sum(case when xf.xfxs='200'and( xf.xfrs>=5and xf.xfrs<=49) and xf.cfxfjbz='1'then1else0end)as cf5lfcjjc,38sum(case when xf.xfxs='200'and( xf.xfrs>=5and xf.xfrs<=49) and xf.cfxfjbz='1'then xf.xfrs else0end)as cf5lfcjrc,39sum(case when xf.xfxs='200'and( xf.xfrs>=50and xf.xfrs<=499) and xf.cfxfjbz='1'then1else0end)as cf50lfcjjc,40sum(case when xf.xfxs='200'and( xf.xfrs>=50and xf.xfrs<=499) and xf.cfxfjbz='1'then xf.xfrs else0end)as cf50lfcjrc,41sum(case when xf.xfxs='200'and xf.xfrs>=500and xf.cfxfjbz='1'then1else0end)as cf500lfcjjc,42sum(case when xf.xfxs='200'and xf.xfrs>=500and xf.cfxfjbz='1'then xf.xfrs else0end)as cf500lfcjrc,43sum(case when xf.xfxs='200'then1else0end)as lxxiaojjc,44sum(case when xf.xfxs='200'then xf.xfrs else0end)as lxxiaojrc,45sum(case when xf.xfxs in('300','303') and xf.cfxfjbz='0'and xf.lmbz='0'then1else0end) as grts,46sum(case when xf.xfxs in('300','303') and xf.cfxfjbz='0'and xf.lmbz='1'then1else0end) as lmts,4748sum(case when xf.xfxs in('300','303') and xf.cfxfjbz='1'and xf.lmbz='0'then1else0end) as cfgrts,4950sum(case when xf.xfxs in('300','303') and xf.cfxfjbz='1'and xf.lmbz='1'then1else0end) as cflmts,51sum(case when xf.xfxs in('300','303') then1else0end) as xiaoji5253from hr_organization l,A_TJBB_quxzbmjdqzxfqk xf where l.jglb='1200'and l.region_dm='500101'and l.bh=xf.djjgbh group by l.mc;5455end bb_quxzbmjdqzxfqk_ces;———————————————————————————————————————————————————————————————————— 1create or replace procedure bb_quxzbmjdqzxfqk_ces(kssj in date,2 jssj in date,3 wtsd2 varchar2,4 isquxian varchar2,5 tjjg out GLOBALPKG.RCT1) as67begin8 v_kssj1 :=kssj;9 v_jssj1 :=jssj;10open tjjg for111213select l.mc as mc,14count(1) as jianci,15sum(case when xf.xfxs='100'then1else16case when xf.xfxs='200'then xf.xfrs else17case when xf.xfxs in ('300','303') then118else0end end end) as rci,19sum(case when xf.xfxs='100'and xf.lmbz='0'and xf.cfxfjbz='0'then1else0end)as grlx,20sum(case when xf.xfxs='100'and xf.lmbz='1'and xf.cfxfjbz='0'then1else0end)as lmx,21sum(case when xf.xfxs='100'and xf.lmbz='0'and xf.cfxfjbz='1'then1else0end)as cfgrlx,22sum(case when xf.xfxs='100'and xf.lmbz='1'and xf.cfxfjbz='1'then1else0end)as cflmx,23sum(case when xf.xfxs='100'then1else0end)as xiaojie,24sum(case when xf.xfxs='200'and xf.xfrs<=4and xf.cfxfjbz='0'then1else0end)as c1lfcjjc,25sum(case when xf.xfxs='200'and xf.xfrs<=4and xf.cfxfjbz='0'then xf.xfrs else0end)as c1lfcjrc,26sum(case when xf.xfxs='200'and( xf.xfrs>=5and xf.xfrs<=49) and xf.cfxfjbz='0'then1else0end)as c5lfcjjc,27sum(case when xf.xfxs='200'and( xf.xfrs>=5and xf.xfrs<=49) and xf.cfxfjbz='0'then xf.xfrs else0end)as c5lfcjrc,28sum(case when xf.xfxs='200'and( xf.xfrs>=50and xf.xfrs<=499) and xf.cfxfjbz='0'then1else0end)as c50lfcjjc,29sum(case when xf.xfxs='200'and( xf.xfrs>=50and xf.xfrs<=499) and xf.cfxfjbz='0'then xf.xfrs else0end)as c50lfcjrc,30sum(case when xf.xfxs='200'and xf.xfrs>=500and xf.cfxfjbz='0'then1else0end)as c500lfcjjc,31sum(case when xf.xfxs='200'and xf.xfrs>=500and xf.cfxfjbz='0'then xf.xfrs else0end)as c500lfcjrc,32sum(case when xf.xfxs='200'and xf.xfrs<=4and xf.cfxfjbz='1'then1else0end)as cf1lfcjjc,33sum(case when xf.xfxs='200'and xf.xfrs<=4and xf.cfxfjbz='1'then xf.xfrs else0end)as cf1lfcjrc,34sum(case when xf.xfxs='200'and( xf.xfrs>=5and xf.xfrs<=49) and xf.cfxfjbz='1'then1else0end)as cf5lfcjjc,35sum(case when xf.xfxs='200'and( xf.xfrs>=5and xf.xfrs<=49) and xf.cfxfjbz='1'then xf.xfrs else0end)as cf5lfcjrc,36sum(case when xf.xfxs='200'and( xf.xfrs>=50and xf.xfrs<=499) and xf.cfxfjbz='1'then1else0end)as cf50lfcjjc,37sum(case when xf.xfxs='200'and( xf.xfrs>=50and xf.xfrs<=499) and xf.cfxfjbz='1'then xf.xfrs else0end)as cf50lfcjrc,38sum(case when xf.xfxs='200'and xf.xfrs>=500and xf.cfxfjbz='1'then1else0end)as cf500lfcjjc,39sum(case when xf.xfxs='200'and xf.xfrs>=500and xf.cfxfjbz='1'then xf.xfrs else0end)as cf500lfcjrc,40sum(case when xf.xfxs='200'then1else0end)as lxxiaojjc,41sum(case when xf.xfxs='200'then xf.xfrs else0end)as lxxiaojrc,42sum(case when xf.xfxs in('300','303') and xf.cfxfjbz='0'and xf.lmbz='0'then1else0end) as grts,43sum(case when xf.xfxs in('300','303') and xf.cfxfjbz='0'and xf.lmbz='1'then1else0end) as lmts,4445sum(case when xf.xfxs in('300','303') and xf.cfxfjbz='1'and xf.lmbz='0'then1else0end) as cfgrts,4647sum(case when xf.xfxs in('300','303') and xf.cfxfjbz='1'and xf.lmbz='1'then1else0end) as cflmts,48sum(case when xf.xfxs in('300','303') then1else0end) as xiaoji4950from hr_organization l,A_TJBB_quxzbmjdqzxfqk xf where l.region_dm='500101'and ((v_kssj1 is not null and j.adddatetime between v_kssj1 and v_jssj1) 51or (v_kssj1 is not nulll and1=1)) and((isquxian is not null and ion.dm = isquxian ) or (isquxian is null and1=1)) and l.jglb='1200'and5253 l.bh=xf.djjgbh group by l.mc;5455end bb_quxzbmjdqzxfqk_ces;。

存储过程例子范文

存储过程例子范文

存储过程例子范文存储过程是在数据库中创建的一组预定义的SQL语句,这些语句按照特定的顺序和逻辑执行,将一系列数据库操作封装在一个单独的单元中。

存储过程可以接受参数,并且可以返回结果集,提高了数据库的性能和安全性。

下面是一个存储过程的例子,该存储过程用于在一个学生表中插入一条记录:```sqlCREATE PROCEDURE InsertStudentASBEGININSERT INTO Students (Name, Age, Gender, Address)END```通过使用存储过程,我们可以有效地执行数据库操作。

我们可以通过以下的SQL语句来调用上面的存储过程:```sqlEXEC InsertStudent 'John Doe', 20, 'M', '123 Main St'```上述语句将会将名为'John Doe'、年龄为20、性别为'M'、地址为'123 Main St'的学生插入到`Students`表中。

除了运行单个的SQL语句,存储过程还可以包含其他控制流结构,例如条件语句和循环语句。

下面是一个带有条件语句的存储过程的例子:```sqlCREATE PROCEDURE GetStudentsByGenderASBEGINSELECT * FROM Students WHERE Gender = 'M'SELECT * FROM Students WHERE Gender = 'F'ELSESELECT * FROM StudentsEND```通过使用存储过程,我们可以根据不同的参数值执行不同的查询,从而提高数据库的灵活性和复用性。

总结起来,存储过程是数据库中一组预定义的SQL语句,可以按照特定的逻辑和顺序执行。

存储过程可以接受参数,并且可以返回结果集。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

可能有不少朋友使用SQL SERVER做开发也已经有段日子,但还没有或者很少在项目中使用存储过程,或许有些朋友认为根本没有必要使用存储过程等等。

其实当你一个项目做完到了维护阶段时,就会发现存储过程给我们带来了好处了,修改方便,不能去改我们的应用程序,只需要改存储过程的内容,而且还可以使我们的程序速度得到提高。

QUOTE:SQL SERVER 联机丛书中的定义:存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。

可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。

也可以创建在 Microsoft SQL Server 启动时自动运行的存储过程。

要使用存储过程,首先我们必需熟悉一些基本的T-SQL语句,因为存储过程是由于一组T-SQL语句构成的,并且,我们需要了解一些关于函数、过程的概念,因为我们需要在应用程序中调用存储过程,就像我们调用应用程序的函数一样,不过调用的方法有些不同。

下面我们来看一下存储过程的建立和使用方法。

一、创建存储过程和数据表一样,在使用之前我们需要创建存储过程,它的简明语法是:QUOTE:CREATE PROC 存储过程名称[参数列表(多个以“,”分隔)]ASSQL 语句例:QUOTE:CREATE PROC upGetUserName@intUserId INT,@ostrUserName NVARCHAR(20) OUTPUT -- 要输出的参数ASBEGIN-- 将uName的值赋给 @ostrUserName 变量,即要输出的参数SELECT @ostrUserName=uName FROM uUser WHERE uId=@intUserIdEND其中 CREATE PROC 语句(完整语句为CREATE PROCEDURE)的意思就是告诉SQL SERVER,现在需要建立一个存储过程,upGetUserName 就是存储过程名称,@intUserId 和@ostrUserName 分别是该存储过程的两个参数,注意,在SQL SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。

只要将以上代码在“查询分析器”里执行一次,SQL SERVER就会在当前数据库中创建一个名为“upGetUserName”的存储过程。

你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择“存储过程”,此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。

二、存储过程的调用之前我们已经创建了一个名为“upGetUserName”的存储过程,从字面理解该存储过程的功能是用来取得某一个用户的名称。

存储过程建立好了,接下来就是要在应用程序里调用了,下面看一下在ASP程序里的调用。

QUOTE:Dim adoComm'// 创建一个对象,我们用来调用存储过程Set adoComm = CreateObject("mand")With adoComm'// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象.ActiveConnection = adoConn'// 类型为存储过程,adCmdStoredProc = 4.CommandType = 4'// 存储过程名称.CommandText = "upGetUserName"'// 设置用户编号.Parameters.Item("@intUserId").Value = 1'// 执行存储过程.Execute'// 取得从存储过程返回的用户名称Response.Write "用户名:" & .Parameters.Item("@ostrUserName").Value End With'// 释放对象Set adoComm = Nothing通过以上两步,我们已经可以创建和使用简单的存储过程了。

下面我们来看一个稍微复杂点的存储过程,以进一步了解存储过程的应用。

三、存储过程的实际应用用户登录在ASP项目中经常会使用到,相信很多朋友也都做过类似的系统,但使用存储过程来做验证朋友可能不多,那么我们就以它来做例子,写一个简单的用户登录验证的存储过程。

QUOTE:CREATE PROC upUserLogin@strLoginName NVARCHAR(20),@strLoginPwd NVARCHAR(20),@blnReturn BIT OUTPUTAS-- 定义一个临时用来保存密码的变量DECLARE @strPwd NVARCHAR(20)BEGIN-- 从表中查询当前用户的密码,赋值给 @strPwd 变量,下面要对他进行比较SELECT @strPwd=uLoginPwd FROM uUser WHERE uLoginName=@strLoginNameIF @strLoginPwd = @strPwdBEGINSET @blnReturn = 1-- 更新用户最后登录时间UPDATE uUser SET uLastLogin=GETDATE() WHERE uLoginName=@strLoginNameENDELSESET @blnReturn = 0END用户登录的存储过程建立好了,现在在程序里试一下吧。

注意,在一个区域内如果有多条语句时,必需使用BEGIN...END关键字。

QUOTE:Dim adoComm'// 创建一个对象,我们用来调用存储过程Set adoComm = CreateObject("mand")With adoComm'// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象.ActiveConnection = adoConn'// 类型为存储过程,adCmdStoredProc = 4.CommandType = 4'// 存储过程名称.CommandText = "upUserLogin"'// 设置登录名称.Parameters.Item("@strLoginName").Value = "admin"'// 设置登录密码.Parameters.Item("@strLoginPwd").Value = "123456"'// 执行存储过程.Execute'// 判断是否登录成功If .Parameters.Item("@blnReturn").Value = 1 ThenResponse.Write "恭喜你,登录成功!"ElseResponse.Write "不是吧,好像错了哦。

"End IfEnd With'// 释放对象Set adoComm = Nothing通过以上的步骤,简单用户登录验证过程也做完了,现在只要把它整合到程序中就可以实现简单的用户登录验证了,关于其他细节就由你自己来处理了。

上面介绍的两个存储过程都是只返回一个值的,下面我们来看一个返回一个记录集的存储过程。

QUOTE:CREATE PROC upGetUserInfos@intUserGroup INTASBEGIN-- 从数据库中抽取符合条件的数据SELECT uName,uGroup,uLastLogin FROM uUser WHERE uGroup=@intUserGroup -- 插入一列合计UNIONSELECT '合计人数:',COUNT(uGroup),NULL FROM uUser WHEREuGroup=@intUserGroupEND现在我们来看一下ASP程序的调用。

QUOTE:Dim adoCommDim adoRt'// 创建一个对象,我们用来调用存储过程Set adoComm = CreateObject("mand")Set adoRs = CreateObject("ADODB.Recordset")With adoComm'// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象.ActiveConnection = adoConn'// 类型为存储过程,adCmdStoredProc = 4.CommandType = 4'// 存储过程名称.CommandText = "upGetUserInfos"'// 设置用户组.Parameters.Item("@intUserGroup").Value = 1'// 执行存储过程,和以上几个例子不同,这里使用RecordSet的Open方法adoRs.Open adoComm'// 显示第一个值Response.write adoRs.Fields(0).ValueEnd With'// 释放对象Set adoRs = NothingSet adoComm = Nothing怎么样,是不是也很简单呢,不过存储过程的用处不仅仅只有这些,他还有更强大的功能,比如使用游标、临时表来从多个表,甚至是多个数据库中调用数据,然后返回给用户,这些你可以在使用过程中慢慢的去发掘。

好了,存储过程应用就先介绍到这里,如果你对本文有任何疑问,欢迎跟贴提出,我将尽力给予解答。

下次我将给大家介绍触发器的应用。

相关文档
最新文档