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是作为参数传递进去的。