- 浏览: 397514 次
- 性别:
- 来自: dazhou
-
最新评论
-
coosummer:
推荐使用http://buttoncssgenerator.c ...
几个漂亮的Button的CSS -
wyzxzws:
yoven 写道那如何检测程序中是否存在内存泄漏呢?http: ...
js前端之---内存泄漏 -
yoven:
那如何检测程序中是否存在内存泄漏呢?
js前端之---内存泄漏 -
asigh:
麻烦博主给下整个mxml文件的代码,1104858212@qq ...
Flex弹出框添加IFrame,jsp或者html页面不随弹出框一起移动问题 -
greatghoul:
http://greatghoul.iteye.com/blo ...
jfreechart饼图
转自:http://hi.baidu.com/huitonet/blog/item/8d31743e2ff4f93c71cf6c40.html
今天和一个网友讨论了一个关于存储过程的数据返回的问题,特此总结了一下,把它写给大家,仅供参考。
在存储过程中,数据的返回有三种方法,当我们编写一个存储过程时,我们应该考虑前台绑定数据的方式而采取不同的返回方法。
第一:select方法
select是我们最常用的方法,它将数据作为标准的纪录集合返回。
第二:return方法
return 提供了返回状态值得方法,这个值一定要是个整数值。不要试图返回一个非整形的数据类型。
第三:output方法:
提供了返回参数值的方法。它可以将指定的参数返回。
请看下面的依照上面的顺序的举例:
CREATE PROCEDURE Sp_check_toq_task
@present_time varchar(12),
AS
SET NOCOUNT ON
DECLARE @send_task_mask INT ///要返回的值
DECLARE @active_time varchar(12)
DECLARE @fail_time varchar(12)
DECLARE @block_time int
DECLARE @apply_days varchar(9)
DECLARE @task_type int
DECLARE @now_state int
DECLARE @weekofday varchar(3)
DECLARE @present_number_time int
DECLARE @active_number_time int
DECLARE @fail_number_time int
DECLARE @old_time Datetime
--- what is day of week to today
SET @weekofday = CASE DATENAME(WEEKDAY, GETDATE())
WHEN ’Monday’ THEN ’1’
WHEN ’Tuesday’ THEN ’2’
WHEN ’Wednesday’ THEN ’3’
WHEN ’Thursday’ THEN ’4’
WHEN ’Friday’ THEN ’5’
WHEN ’Saturday’ THEN ’6’
WHEN ’Sunday’ THEN ’7’
ELSE ’0’
END
--- init task mask to 0
SET @send_task_mask = 0
--- convert string time to int time
SET @present_number_time = CONVERT(INT,RTRIM(@present_time))
--- declare cursor
DECLARE check_task_cursor CURSOR LOCAL DYNAMIC FOR SELECT start_time,end_time,seprate_time,affect_days,data_type,recently_time,present_status
FROM Toq_task_list
WHERE affect_days LIKE
’%’ + rtrim(@weekofday) + ’%’ and present_status = 0 AND ABS(DATEDIFF(MI,recently_time, GETDATE())) >= seprate_time
FOR UPDATE OF recently_time
--- open recdord set
OPEN check_task_cursor
--- fill variable
FETCH NEXT FROM check_task_cursor INTO @active_time,@fail_time,@block_time,@apply_days,@task_type,@old_time,@now_state
WHILE @@FETCH_STATUS = 0
BEGIN
--- above of all, convert string to number
SET @active_number_time = CONVERT(INT,rtrim(@active_time))
SET @fail_number_time = CONVERT(INT,rtrim(@fail_time))
----- IF((@present_number_time > @active_number_time) and (@present_number_time <= @fail_number_time)) BEGIN
IF((@present_number_time - @active_number_time>= @block_time) and (@present_number_time <= @fail_time)) BEGIN
SET @send_task_mask = @send_task_mask | @task_type
BEGIN TRANSACTION
UPDATE Toq_task_list SET recently_time = getdate() WHERE CURRENT OF check_task_cursor
COMMIT
END
FETCH NEXT FROM check_task_cursor INTO @active_time,@fail_time,@block_time,@apply_days,@task_type,@old_time,@now_state
END
--- close sursor
CLOSE check_task_cursor
--- free malloc
DEALLOCATE check_task_cursor
SELECT (@send_task_mask) AS task_mask ///将@send_task_mask
//作为标准记录集合返回
-----------------------------------------------------------
CREATE PROCEDURE Sp_check_toq_task
@present_time varchar(12),
AS
SET NOCOUNT ON
DECLARE @send_task_mask INT ///要返回的值
DECLARE @active_time varchar(12)
DECLARE @fail_time varchar(12)
DECLARE @block_time int
DECLARE @apply_days varchar(9)
DECLARE @task_type int
DECLARE @now_state int
DECLARE @weekofday varchar(3)
DECLARE @present_number_time int
DECLARE @active_number_time int
DECLARE @fail_number_time int
DECLARE @old_time Datetime
--- what is day of week to today
SET @weekofday = CASE DATENAME(WEEKDAY, GETDATE())
WHEN ’Monday’ THEN ’1’
WHEN ’Tuesday’ THEN ’2’
WHEN ’Wednesday’ THEN ’3’
WHEN ’Thursday’ THEN ’4’
WHEN ’Friday’ THEN ’5’
WHEN ’Saturday’ THEN ’6’
WHEN ’Sunday’ THEN ’7’
ELSE ’0’
END
--- init task mask to 0
SET @send_task_mask = 0
--- convert string time to int time
SET @present_number_time = CONVERT(INT,RTRIM(@present_time))
--- declare cursor
DECLARE check_task_cursor CURSOR LOCAL DYNAMIC FOR SELECT start_time,end_time,seprate_time,affect_days,data_type,recently_time,present_status
FROM Toq_task_list
WHERE affect_days LIKE
’%’ + rtrim(@weekofday) + ’%’ and present_status = 0 AND ABS(DATEDIFF(MI,recently_time, GETDATE())) >= seprate_time
FOR UPDATE OF recently_time
--- open recdord set
OPEN check_task_cursor
--- fill variable
FETCH NEXT FROM check_task_cursor INTO @active_time,@fail_time,@block_time,@apply_days,@task_type,@old_time,@now_state
WHILE @@FETCH_STATUS = 0
BEGIN
--- above of all, convert string to number
SET @active_number_time = CONVERT(INT,rtrim(@active_time))
SET @fail_number_time = CONVERT(INT,rtrim(@fail_time))
----- IF((@present_number_time > @active_number_time) and (@present_number_time <= @fail_number_time)) BEGIN
IF((@present_number_time - @active_number_time>= @block_time) and (@present_number_time <= @fail_time)) BEGIN
SET @send_task_mask = @send_task_mask | @task_type
BEGIN TRANSACTION
UPDATE Toq_task_list SET recently_time = getdate() WHERE CURRENT OF check_task_cursor
COMMIT
END
FETCH NEXT FROM check_task_cursor INTO @active_time,@fail_time,@block_time,@apply_days,@task_type,@old_time,@now_state
END
--- close sursor
CLOSE check_task_cursor
--- free malloc
DEALLOCATE check_task_cursor
return (@send_task_mask) ///作为状态码返回
-----------------------------------------------------------
CREATE PROCEDURE Sp_check_toq_task
@present_time varchar(12),
@send_task_mask int output ///指定这个参数为返回值
AS
SET NOCOUNT ON
DECLARE @active_time varchar(12)
DECLARE @fail_time varchar(12)
DECLARE @block_time int
DECLARE @apply_days varchar(9)
DECLARE @task_type int
DECLARE @now_state int
DECLARE @weekofday varchar(3)
DECLARE @present_number_time int
DECLARE @active_number_time int
DECLARE @fail_number_time int
DECLARE @old_time Datetime
--- what is day of week to today
SET @weekofday = CASE DATENAME(WEEKDAY, GETDATE())
WHEN ’Monday’ THEN ’1’
WHEN ’Tuesday’ THEN ’2’
WHEN ’Wednesday’ THEN ’3’
WHEN ’Thursday’ THEN ’4’
WHEN ’Friday’ THEN ’5’
WHEN ’Saturday’ THEN ’6’
WHEN ’Sunday’ THEN ’7’
ELSE ’0’
END
--- init task mask to 0
SET @send_task_mask = 0
--- convert string time to int time
SET @present_number_time = CONVERT(INT,RTRIM(@present_time))
--- declare cursor
DECLARE check_task_cursor CURSOR LOCAL DYNAMIC FOR SELECT start_time,end_time,seprate_time,affect_days,data_type,recently_time,present_status
FROM Toq_task_list
WHERE affect_days LIKE
’%’ + rtrim(@weekofday) + ’%’ and present_status = 0 AND ABS(DATEDIFF(MI,recently_time, GETDATE())) >= seprate_time
FOR UPDATE OF recently_time
--- open recdord set
OPEN check_task_cursor
--- fill variable
FETCH NEXT FROM check_task_cursor INTO @active_time,@fail_time,@block_time,@apply_days,@task_type,@old_time,@now_state
WHILE @@FETCH_STATUS = 0
BEGIN
--- above of all, convert string to number
SET @active_number_time = CONVERT(INT,rtrim(@active_time))
SET @fail_number_time = CONVERT(INT,rtrim(@fail_time))
----- IF((@present_number_time > @active_number_time) and (@present_number_time <= @fail_number_time)) BEGIN
IF((@present_number_time - @active_number_time>= @block_time) and (@present_number_time <= @fail_time)) BEGIN
SET @send_task_mask = @send_task_mask | @task_type
BEGIN TRANSACTION
UPDATE Toq_task_list SET recently_time = getdate() WHERE CURRENT OF check_task_cursor
COMMIT
END
FETCH NEXT FROM check_task_cursor INTO @active_time,@fail_time,@block_time,@apply_days,@task_type,@old_time,@now_state
END
--- close sursor
CLOSE check_task_cursor
--- free malloc
DEALLOCATE check_task_cursor
////因为@send_task_mask有了OUTPUT的定义,它将自动返回给客户
////端,所以它不需要任何的返回指令
显然返回数据的三种方法,有各自的优点和缺点
SELECT 对资源的开销比较大,因为它将数据作为记录集合而返回,
它最大的优点是客户端可以常规的方便的取出数据。
RETURN 对资源的开销比较小,但它限定了数据类型为整形,适应面
不广,而且客户端要做一些特殊判断才能取出数据。
OUTPUT 对资源的开销比较小,适应各种数据类型,而且服务端不需要做数据类型转换,减少了服务端的负担。它唯一的缺点是要多做一些特殊判断才能取出数据。
下面给出了在DB-LIBRARY中分别对应的取数据用到的函数:
1。SELECT:DBBIND
2。RETURN:DBHASRETSTAT
3。OUTPUT:DBNUMREC、DBRETDATA
这些函数的具体用法,我就不罗嗦了!各位大虾自己去查资料吧!
发表评论
-
charles抓不到包问题
2016-07-20 17:07 3142http://l23q5.com/blog/2016/03/2 ... -
vim 系统剪贴板负责粘贴
2015-08-27 17:23 952在vimrc里边加入下面几行,可以实现多个termi ... -
MAC man命令的中文帮助文档
2015-03-23 15:01 1317mac系统版本: OSX 10.8.2 默认在终端进行ma ... -
nginx配置mac-403
2015-03-20 10:31 844在 MAC 上用BREW 安装好NGINX 后,修改网站文 ... -
配色理论
2014-12-17 10:05 978在设计领域,颜色是 ... -
html页面调用安卓应用
2014-12-16 16:56 741今天老大给我提了一个需求叫我调研一下,他已经测试了IOS平 ... -
汉字转拼音处理
2014-12-11 16:47 1839汉字转拼音处理: pym: { ... -
acdsee15破解方法
2014-12-09 10:28 586开始---运行---输入:regedit 进入注册表 ... -
mac解压缩命令大全
2014-11-25 10:41 1591tar 解包:tar xvf FileN ... -
分享集合js
2014-11-17 10:52 428分享集合: 微信内嵌浏览器 通过 Mac 远程调试 i ... -
基于PhoneGap的webOS平台入门教程
2014-05-23 15:59 696基于PhoneGap的webOS平台入门教程:http://t ... -
基于PhoneGap的iOS&Android平台入门教程
2014-05-23 15:55 683基于PhoneGap的iOS&Android平台入门教 ... -
window.open浏览器兼容问题
2014-03-20 15:09 987问题描述:浏览器window.open参数兼容问题。 解 ... -
Tomcat域名或IP地址访问方式配置方法
2014-02-24 23:02 623http://blog.csdn.net/zhuxiaowe ... -
百度地图api参考
2013-09-27 10:04 2608问题:刚接触百度地图有很多基础问题不明白。 解决方案:ht ... -
div+css居中实践
2013-07-28 21:11 830问题:一段时间以来,发觉div+css居中问题越来越被关注 ... -
你应该知道的CSS文字大小单位PX、EM、PT ---转载
2013-07-21 13:02 829转载:http://www.html5cn.or ... -
不用图片和JS,照样创建绚丽的动态CSS3菜单---转载
2013-07-21 12:49 703转载:http://www.html5cn.org/art ... -
淘宝前端工程师:国内前端行业十日谈(转载)
2013-06-29 19:52 834http://www.chinaz.com/manage/20 ... -
eclipse编码统一设置
2013-06-07 10:13 1283转自:http://blog.csdn.net/ ...
相关推荐
在C#中调用Oracle存储过程来返回数据集是一个常见的任务,这涉及到ADO.NET库的使用,特别是OracleClient组件。Oracle存储过程是数据库中的预编译SQL代码块,可以接收输入参数,执行复杂的业务逻辑,并返回结果。在C#...
在Oracle数据库中,存储过程返回数据集的功能可以通过定义游标(RefCursor)来实现。与SQL Server相比,Oracle在这一方面需要额外的步骤来进行配置和处理,但通过正确的设置仍然能够达到目的。本文将详细介绍如何...
在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`参数则允许过程向调用者返回数据。而`SYS_REFCURSOR`是Oracle提供的一种特殊类型,它允许存储过程动态地打开一个游标(即结果集)并将其作为`OUT`参数返回。 ...
在软件开发过程中,经常需要与数据库进行交互,其中一种常见的场景就是通过调用存储过程来获取数据并处理这些数据。本篇文章将详细探讨如何在C#中执行SQL Server的存储过程,并将结果集封装到一个`DataSet`对象中。 ...
#### 三、创建存储过程返回结果集 ##### 1. 过程返回记录集 下面是一个简单的示例,展示如何创建一个存储过程来返回结果集: ```sql CREATE OR REPLACE PACKAGE pkg_test AS TYPE myrctype IS REF CURSOR; -- ...
在本示例中,我们将探讨如何通过存储过程返回多个值,并且结合PHP进行调用。 首先,我们要明白在MySQL中,存储函数只能返回一个单一的值,而存储过程则可以处理更复杂的情况,包括返回多个值。要实现这一功能,我们...
总结来说,本示例展示了如何在Oracle存储过程中定义和使用结构化数组,以及如何在Java中调用这些存储过程并解析返回的多行多列数据。通过这种方式,你可以高效地处理复杂的数据结构,同时利用Java的灵活性来处理这些...
C# 存储过程处理批量数据是指在 ASP.NET 中使用存储过程来处理大量数据的技术。这个技术可以提高数据处理的效率,并减少数据库服务器的负载。 在这个示例中,我们使用了 C# 语言来实现批量数据处理。我们首先在表现...
存储过程中通过返回数据集,通过游标方式实现,以及在java中如何接收的整个过程
4. **处理结果集**:遍历`ResultSet`,获取存储过程返回的集合数据: ```java while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); // ... 其他字段 System.out.println("ID: ...
本篇将详细讨论存储过程返回结果集的两种类型:调用者(to caller)和客户应用(to client)。 首先,让我们理解这两种返回结果集类型的差异: 1. **调用者(to caller)**: 当存储过程的结果集返回给调用者时,...
在C#中调用存储过程主要有两种方法,这两种方法都在.NET框架下被广泛使用,尤其在B/S系统中,存储过程的调用扮演了重要角色。传统的调用方式可能存在效率低、代码冗余等问题,而新的方法则在一定程度上优化了这些...
5. Oracle中返回记录集的存储过程的定义:在Oracle存储过程中,通过定义类型为REF CURSOR的传出参数,可以返回记录集。OLE DB允许消费者执行带REF CURSOR类型参数的PL/SQL存储过程,或者执行返回REF CURSOR的存储...
本文将详细介绍如何在 Oracle 中创建一个用于分页查询并返回总记录数的存储过程。 #### 核心概念 1. **存储过程**:存储在数据库中的可编程对象,可以接受参数、执行操作、返回结果。 2. **分页**:通过限制查询...
在给定的`存储过程导出表数据为添加语句.sql`文件中,应该包含了创建这样一个存储过程的具体SQL代码。执行这个存储过程时,只需要提供待导出的表名作为参数,如`EXEC 存储过程名称 '表名称';`。存储过程内部会处理...
在Java编程中,调用数据库的存储过程并处理返回结果是常见的任务,特别是在需要执行复杂数据库操作或者封装业务逻辑时。本文将详细探讨如何在Java中调用存储过程,并处理返回的数组类型数据。 首先,存储过程是一种...
下面,我们将深入探讨如何使用`SQLHelper`类来调用带有输出或返回参数的存储过程,这在实际项目中极为常见。 ### 1. SQLHelper 类的作用 `SQLHelper`类是.NET框架中用于封装对数据库进行各种操作的方法集合,它的...