oracle分页存储过程不用游标,Oracle全文搜索分页存储过程

首先获取数据总数:

execute immediate 'Select Count(*) from (Select [id] From [table] where [Condition])' into [iNum];

计算分页数据上下限:

[iLow] := [iPage] * [iPageSize];

[iHigh] := [ilow] + [iPageSize];

获取分页数据,游标返回:

sSql := 'Select * From [table] where id between [ilow] and [ihigh]';

open cur for sSql;

其中游标定义(在package中):

TYPE type_cur IS REF CURSOR;

函数中参数说明:out cur type_cur;

全文搜索分页存储过程:/*================================================*//*=过程开始*//*================================================*/CREATE OR REPLACE  PACKAGE BODY "SEARCHTEST"."PAGE1" as -- 返回指定分页的数据集PROCEDURE PageSearch(  sKey in varchar2,                --搜索关键字        iIndex in number,                --分页页码   iSize in number,                 --页面大小  iCount out number,               --返回记录总数  records out type_cur             --返回当前页数据记录 ) AS  v_sql VARCHAR2(1000);    sSql varchar2(1000);             --PageRecordsCount 计算记录条目用Sql语句     ilow number;  ihei number;  sTable Varchar2(1000);           --表名   sField Varchar2(1000);           --待搜索内容所在字段名 Begin    sTable := 'TEXT1';  sField := 'SB01' ;  -- 按匹配程度 降序排列的 返回所有模糊数据的SQL  sSql := 'SELECT * FROM ' || sTable || ' Where Contains(' || sField || ',''About(' || sKey || ')'' , 1) > 0 Order By Score(1) DESC';  --取分页总数  v_sql := 'select count(*) from (' || sSql || ')';  execute immediate v_sql into iCount;    --显示任意页内容  ihei := iIndex * iSize ;  ilow := ihei - iSize + 1;    -- 对所有模糊数据 数据集 获取列号的SQL  v_sql := 'SELECT RowNum rn , t.* From (' || sSql || ') t';      --获取分页数据  v_sql := 'select * from (' || v_sql || ') where rn between ' || ilow || ' and ' || ihei;  open records for v_sql;   End PageSearch; end Page1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值