一条大而全SQL与函数之间的抉择:谁是更为有效的SQL?(二)

2015-01-25 20:39:25 · 作者: · 浏览: 11
的介绍:

CREATE [OR REPLACE] FUNCTION function_name
 (arg1 [ { IN | OUT | IN OUT }] type1 [DEFAULT value1],
 [arg2 [ { IN | OUT | IN OUT }] type2 [DEFAULT value1]],
 ......
 [argn [ { IN | OUT | IN OUT }] typen [DEFAULT valuen]])
 [ AUTHID DEFINER | CURRENT_USER ]
RETURN return_type 
 IS | AS
    <类型.变量的声明部分> 
BEGIN
    执行部分
    RETURN expression
EXCEPTION
    异常处理部分
END function_name;
更多细节参考:http://blog.csdn.net/jiyiqinlovexx/article/details/13417455

查询优化 --- 分批查询:

因为我们的产品数量还是比较多,几千条以上,而且还有很多图片,不可能一次查询返回所有图片,所以需要分批查询,每次点击都只加载一部分。

模式时这样的: 点击查询按钮,前台就会请求服务器上的RPC接口返回第一批500条数据,并且为本次查询创建一个唯一的sessionID,每次界面上点击“加载更多”按钮的时候,用这个sessionID,以及当前已经返回到了第几行这两个参数调用服务器上的RPC接口继续返回下一批数据。

如果点击加载全部按钮,就在客户端开启一个后台工作者线程一直跑这个“加载更多”这个过程。

核心就是记录当前这次查询回话的sessionID,当前已经返回了多少条记录了这些信息,以及分批查询用的SQL语句。

下面就是分批查询的SQL语句,返回第500-1000条记录:

select * from
(
	select A.*,ROWNUM RN from
	(
		select distinct T.*,FUNC_HASATTACHMENT(t.PRODUCTID) from PRODUCT T
	) A 
	where ROWNUM<={1000}
)
where RN>500
注:程序中500和1000是作为参数传递进去的。