精华内容
下载资源
问答
  • oracle分页查询并返回总记录数据存储过程
  • 查询功能树数据 DROP PROCEDURE IF EXISTS FunctionGet_SP; create procedure FunctionGet_SP ( in PageIndex int(11), – 页码 in PageSize int(11), – 每页记录数 in _Sort varchar(32), – 排序字段 out ...

    – 查询功能树数据
    DROP PROCEDURE IF EXISTS FunctionGet_SP;

    create procedure FunctionGet_SP (
    in PageIndex int(11), – 页码
    in PageSize int(11), – 每页记录数
    in _Sort varchar(32), – 排序字段
    out RecordCount int(11) – 总记录数
    )
    begin

    set @stmt = concat('select SQL_CALC_FOUND_ROWS ID,ParentID,Flag,Name,FunctionType,Href,Sort, Icon,IsEnable,CreateBy,CreateTime,UpdateBy,UpdateTime from Function where IsEnable = 1 order by ',_Sort,' limit ?,?');
    prepare s1 from @stmt;
    set @s1 = PageSize*(PageIndex-1);
    set @s2 = PageSize*PageIndex;
    execute s1 using @s1,@s2;
    -- 获取影响的行数
    SET @cnt = FOUND_ROWS(); 
    -- 输出影响函数
    SELECT @cnt INTO RecordCount; 
    deallocate prepare s1;
    

    end;


    需要加上SQL_CALC_FOUND_ROWS

    展开全文
  • 按照我们正常的业务逻辑,存储过程数据首先是分页,其次接受若干查询条件,返回分页结果集的同时还需要返回记录总数给客户端。我对于这样一个业务存储过程总结如下:1、内核层,通常也就是要查询的字段或者要计算的...

    前言

    好长时间没摸数据库了,周末在家写了个报表的存储过程,一时间对使用存储过程实现分页的同时并计算出记录总数不知道怎么更好的去实现。按照我们正常的业务逻辑,存储过程数据首先是分页,其次接受若干查询条件,返回分页结果集的同时还需要返回记录总数给客户端。

    我对于这样一个业务存储过程总结如下:1、内核层,通常也就是要查询的字段或者要计算的字段,这部分单独拿出来。  2、查询条件层。 如果内核只是查询一些字段的话,条件可以放在查询条件层拼接。 如果内核层完全是统计业务逻辑,那么查询条件则必须要放在内核层,像我们常用的SUM、GROUPBY 业务。 3、添加分页参数(也就是我们现在多数用的ROW_NUMBER添加rn参数)。   存储过程里我们一般会单独声明每个部分的变量用于执行时拼接。

    存储过程

    CREATE proc [dbo].[usp_manyidu]( @seatno nvarchar(30), @pageIndex int, @pageSize int, @rsCount int out)asbegin declare @sql nvarchar(max) --拼接内核SQL declare @where nvarchar(max)=' where 1=1' --查询条件拼接字符串 declare @cols nvarchar(max) --查询字段、计算字段 declare @sort nvarchar(50) --排序 set @sql=' from dbo.log where seatno is not null and seatno<>'''' group by seatno ' set @cols='seatno,SUM(case when manyidu=0 then 1 else 0 end) as manyi, SUM(case when manyidu=1 then 1 else 0 end) as yiban, SUM(case when manyidu=2 then 1 else 0 end) as bumanyi, SUM(case when manyidu IS null or manyidu='''' then 1 else 0 end) as weipingjia' set @sort='order by seatno' if(@seatno <>'') set @where+=' and seatno='+@seatno declare @strSQL nvarchar(max) set @strSQL=N'select * from (select ROW_NUMBER() over('+@sort+') as tmpid,* from( select * from (select '+@cols+@sql+') as tmpTable1'+@where+') as tmpTable2) as tmpTable3' +' where tmpid between '+STR((@pageIndex-1)*@pageSize+1)+' and '+STR(@pageIndex*@pageSize) print @strSQL exec(@strSQL) set @strSQL='select @total=count(*) from (select '+@cols+@sql+') as tmpTable'+@where print @strSQL exec sp_executesql @strSQL,N'@total int out',@total=@rsCount out endGO

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持web开发者。

    展开全文
  • 想实现传入起始日期和终止日期两个参数,然后将在这一时间段内的数据查询结果以数据表形式返回。想通过创建Oracle存储过程来实现,如何操作?以前在SQL SERVER中创建过,但是不知道在ORACLE中如何建立。谢谢了
  • 与SQL Server的存储过程和函数均可以返回结果集不同的是,PL/SQL的存储过程和函数均不直接提供返回数据集的方法,但可以通过返回类型对象来实现返回数据集的效果。具体思路为: (1)创建包头,在其中声明类型和...
    Oracle的存储过程和函数并不能直接返回查询结果集。也就是说在Oracle存储过程或函数中直接写查询返回结果集是非法的(在SQL Server是可以的)。
    与SQL Server的存储过程和函数均可以返回结果集不同的是,PL/SQL的存储过程和函数均不直接提供返回数据集的方法,但可以通过返回类型对象来实现返回数据集的效果。具体思路为:
    (1)创建包头,在其中声明类型和存储过程,类型应该引用游标;
    (2)创建包体,定义存储过程,执行查询,将查询得到的结果集以游标句柄的形式返回。
    说明:游标分为显示游标和隐式游标,任何查询结果默认都提供隐式游标,当前方案的重点在于使用游标取得查询结果的句柄,由于游标被引用为类型,通过返回类型,即等效于(并不等同)返回数据集。

    具体的案例如下:
    --创建包头
    create or replace package testpackage
    as
    --声明类型,并引用游标
    type cursorType is ref cursor;
    --声明存储过程,两个输入参数,一个输出参数,输出游标类型数据
    procedure prcGetGlobalAddress
    (
    pos1 integer, --分页查询的下限
    pos2 integer, --分页查询的上限
    cur in out testpackage.cursorType --输出参数,数据类型为引用游标的类型
    );
    end mypackage1;


    --创建包体
    create or replace package body testpackage
    as
    --定义存储过程
    procedure prcGetGlobalAddress
    (
    pos1 integer,
    pos2 integer,
    cur in out testpackage.cursorType
    )
    as
    begin
    --返回得到分页查询结果集的游标句柄
    open cur for
    select *
    from ( select a.*,rownum rn
    from ( select *
    from tblsys_globaladdress) a
    where rownum<=pos2)
    where rn > =pos1;
    end prcGetGlobalAddress;

    end testpackage;

    上面兩句話,又想起來ORACLE分頁的東東了,
    SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (select count(*) over() CNT,
    ta.ca,ta.cb,ta.cc,... from ta ORDER BY ta.ca
    ) A WHERE ROWNUM <= 10 ) WHERE RN >= 1
    還有把*號換裝你想要字段名称效率还会继续提高 特别是大数据量的时候。
    展开全文
  • 现在的问题是:在SQL查询分析器中,单独执行带参的存储过程,结果集是有数据的。 但这些数据始终无法在PHP前端显不出来,是什么原因呢?我执行存储过程的方法如下: $params = array( array($sDate, SQLSRV_...
  • 8.2.4小节中已经介绍了使用存储过程查询单表(Category)数据的方法,本小节介绍使用存储过程查询多个表的数据的方法。下面的代码实例在LinqDBDataContext类中创建Pr_GetUserAndRole()方法。该方法将调用Pr_...

      8.2.4小节中已经介绍了使用存储过程查询单表(Category)数据的方法,本小节介绍使用存储过程查询多个表的数据的方法。

    下面的代码实例在LinqDBDataContext类中创建Pr_GetUserAndRole()方法。该方法将调用Pr_GetUserAndRole存储过程,并返回该存储过程的执行结果。由于Pr_GetUserAndRole存储过程返回两种类型的结果(UserInfoRole表),因此,Pr_GetUserAndRole()方法使用ResultType属性指定结果的数据类型(UserInfoRole),并指定返回结果的数据类型为IMultipleResults

    [Function(Name = "dbo.Pr_GetUserAndRole")]

    [ResultType(typeof(UserInfo))]

    [ResultType(typeof(Role))]

    public IMultipleResults Pr_GetUserAndRole()

    {

    IExecuteResult result = this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())));

    return (IMultipleResults)(result.ReturnValue);

    }

    上述的Pr_GetUserAndRole()方法调用了Pr_GetUserAndRole存储过程,该存储过程从LinqDB数据库的UserInfoRole表中获取数据。它的程序代码如下:

    CREATE PROCEDURE dbo.Pr_GetUserAndRole

    AS

    SELECT * FROM UserInfo

    SELECT * FROM Role

    使用存储过程查询多表数据的功能由Sample_08应用程序中的ProcedureQueries.aspx页面实现,它的代码隐藏文件为ProcedureQueries.aspx.aspx.cs

    1.创建ProcedureQueries.aspx页面

    ProcedureQueries.aspx页面上创建2GridView控件,ID属性的值分别为gvUsergvRoleProcedureQueries.aspx页面的HTML设计代码如下:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ProcedureQueries.aspx.cs"

    Inherits="ProcedureQueries" %>

    <head runat="server"><title>使用存储过程查询多表数据</title></head>

    <asp:GridView ID="gvUser" runat="server"></asp:GridView><br />

    <asp:GridView ID="gvRole" runat="server"></asp:GridView>

    2ProcedureQueries.aspx页面初始化

    ProcedureQueries.aspx页面初始化功能由其Page_Load(object sender, EventArgs e)事件实现。该事件调用ShowData()函数使用LINQ执行Pr_GetCategorys存储过程查询UserInfoRole表中的记录,并分别显示在gvUsergvRole控件中。具体步骤如下。

    1)创建LinqDBDataContext类的实例db

    2)调用Pr_GetUserAndRole()方法执行Pr_GetUserAndRole存储过程获取数据,结果保存为result(数据类型为IMultipleResults)变量。

    3)使用GetResult<UserInfo>()方法获取result变量中UserInfo表中的数据,并使用LINQ查询ID列的值小于10的记录,查询结果保存在users变量中。

    4)使用GetResult<Role>()方法获取result变量中Role表中的数据,并保存在roles变量中。

    5)分别把usersroles变量设置为gvUsergvRole控件的数据源,并绑定控件的数据,显示查询结果。

    Page_Load(object sender, EventArgs e)事件和ShowData()函数的程序代码如下:

    using System.Data.Linq;

    using System.Collections.Generic;

    protected void Page_Load(object sender, EventArgs e)

    {

    if (!Page.IsPostBack){ShowData();}

    }

    private void ShowData()

    {   ///创建LinqDB数据库的数据上下文的实例

    LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);

    ///获取所有数据

    IMultipleResults result = db.Pr_GetUserAndRole();

    ///获取用户信息

    IEnumerable<UserInfo> users = from u in result.GetResult<UserInfo>()

    where u.ID < 10

    select u;

    ///获取角色信息

    IEnumerable<Role> roles = result.GetResult<Role>();

    ///绑定控件数据,并显示

    gvUser.DataSource = users;

    gvUser.DataBind();

    gvRole.DataSource = roles;

    gvRole.DataBind();

    }

    ProcedureQueries.aspx页面设置为Sample_08应用程序的起始页面,并运行Sample_08应用程序。ProcedureQueries.aspx页面的初始化界面如图所示,此时,该页面显示UserInfoRole表中的记录。

    展开全文
  • LINQ to SQL能够调用存储过程从数据库中查询数据。为了方便开发人员调用存储过程,LINQ to SQL将为存储过程创建一个方法,指定该方法调用的存储过程,以及传入的参数和返回值。下面的代码实例在LinqDBDataContext...
  • 【实习】刚入职,公司要求完成两个任务,任务要求使用存储过程和事务,其中一个问题要获取存储过程查询结果集。经过多方查找和自己的实践,终于找到了方法。这里记录一下。 看到的这篇文章中给出的例子是查询单个...
  • 创建后台程序包,构造数据对FORMS数据相关操作进行定义,包括:Execute/Insert/Update/Delete/Update和查询返回记录数 /***********************************************脚本举例**********
  • 那么,有些情况,会把一些查询语句写在存储过程中,由存储过程返回记录集。 在这里就先通过EntityManager创建命名存储过程的方法完成调用。   1.创建SQL存储过程 存储过程返回所有的联系人。 USE [demodb]...
  • 使用存储过程中,最常用的莫过于查询数据表,并返回结果集。 在SQL SERVER 中,这类操作最简单,通过简单的select * from xx 即可完成。但是在Oracle中并不支持这种写法,那么我们怎么实现跟SQL SERVER同样的功能呢...
  • 游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作;游标有下面这些属性:  a、游标是只读的,也就是不能更新它;  b、游标是不能滚动的,也就是只能在一个方向上进行遍历,不能在...
  • 按照我们正常的业务逻辑,存储过程数据首先是分页,其次接受若干查询条件,返回分页结果集的同时还需要返回记录总数给客户端。  我对于这样一个业务存储过程总结如下:1、内核层,通常也就是要查询的字段或者要计算...
  • 1、游标的作用及属性游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作;游标有下面这些属性:a、游标是只读的,也就是不能更新它;b、游标是不能滚动的,也就是只能在一个方向上进行遍历,...
  • C#调用Oracle带输出数据集的存储过程

    千次阅读 2016-09-06 11:36:01
    1、创建一个带输出数据集的Oracle存储过程 create or replace procedure PRO_test(in_...--查询指定记录条数的数据并返回总共记录数,返回多个数据集 begin open cur_out for SELECT * FROM dept_dict where r
  • 从数据库找到相关的数据并返回。如果循环取数据,那么会产生N条SQL。(N为 list 的size)开始计划使用临时表,先把list数据插入到数据库。可以使用批量插入,虽然也需要产生N条SQL,但是性能应该会比N个查询快很多。...
  • 1、存储过程概念在大型数据库系统中,一组为了完成特定功能的sql语句集,经编译后存储在数据库中,用户通过指定存储过程的名字给出参数(如果该存储过程带有参数)来执行它。2、建立存储过程delimiter//create ...
  • 我有一个调用存储过程的Java类,并返回一个数据库中的状态列表(这是我学习时的测试用例,其他更复杂的动作将在稍后发布)。状态列表应该返回给JSP以供在表单中显示/使用等。现在,我很高兴通过JSP页面获取数据打印,...
  • Transact SQL允许创建存储过程和函数,存储过程用于自动执行任何操作,这些功能旨在扩展查询功能,它们可以作为查询的一部分执行,始终返回值。存储过程由执行指令调用,不能返回任何值,要检索报表中的数据,可以...
  • SQL 存储过程

    2016-03-21 15:16:26
     存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。 系统存储过程  系统存储过程是系统创建的存储过程,目的在于能够方便的从系统表中查询...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 399
精华内容 159
关键字:

存储过程查询数据并返回数据