`
smartox
  • 浏览: 2013 次
  • 性别: Icon_minigender_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
還有把*號換裝你想要字段名称效率还会继续提高 特别是大数据量的时候。
分享到:
评论

相关推荐

    MySQL实验报告5(存储过程与函数)(1)(1).pdf

    报告中并没有直接提及函数的创建,但是存储过程中的某些操作可以通过函数来实现,比如获取表中的记录数等。 3. 使用游标 游标允许逐行遍历查询结果集。在报告中,update_student_borthyear存储过程中使用了游标来...

    Mysql存储过程和函数

    - **存储过程**(Stored Procedure):是一系列SQL语句的集合,它可以接受输入参数并返回多个结果集和返回值。存储过程可以提高代码复用性,减少网络流量,并且可以包含复杂的逻辑控制结构。 - **函数**(Function)...

    存储过程的返回结果集有2中类型

    例如,在MySQL中,存储过程可以直接返回一个SELECT语句的结果集,这样客户端(如Java程序、PHP脚本或数据库管理工具)就可以像处理任何其他查询结果一样处理它。这种方式对于那些需要显示在用户界面上或者进一步处理...

    sqlserver 存储过程 函数 常用知识点

    - **输入参数**(IN):只能在存储过程或函数内部使用,不能被其修改。 - **输出参数**(OUT):允许存储过程或函数向调用者返回值。 - **输入/输出参数**(IN/OUT):既可以用作输入,也可以用作输出。 4. **...

    JAVA通过MyBatis调用MySql存储过程和函数doc文档合集整理.zip

    - 对于存储过程返回的结果集,可以通过`ResultMap`定义映射规则,或者使用`@Results`和`@Result`注解。 6. **事务管理** - 调用存储过程和函数可能涉及多条SQL语句,MyBatis的事务管理机制能确保操作的原子性。 ...

    oracle存储过程和函数PPT

    函数与存储过程类似,也是预编译的代码块,但它们的主要区别在于函数必须返回一个值,而存储过程可能不返回任何值。函数可以作为查询的一部分被嵌入到SQL语句中,提高了代码的可读性和效率。比如,你可以创建自定义...

    数据库存储过程和函数.pdf

    在数据库领域,存储过程(Procedure)和存储函数(Function)是重要的数据库对象,用于封装一系列操作,提高数据处理效率。MySQL数据库管理系统提供了这两种机制,允许开发者编写复杂的SQL语句集,并通过特定的名称...

    第10章 存储过程和函数PPT

    6. **返回值和结果集**:理解如何从存储过程和函数中返回单个值或多个结果集。 7. **权限与安全**:学习如何为存储过程和函数设置权限,以确保数据的安全访问。 8. **性能优化**:探讨存储过程和函数如何提高...

    ORACLE存储过程,函数,包,游标

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的编程接口,其中存储过程、函数、包和游标是数据库开发中常用的重要元素。以下是对这些概念的详细解释和它们在实际应用中的作用。 ### 存储过程 ...

    sqlserver 存储过程,函数,视图实例

    函数与存储过程类似,也是预编译的SQL代码,但主要区别在于函数必须返回一个值,而存储过程可能不返回值或者返回多个结果集。在SQL Server中,有两类函数:内置函数和用户自定义函数(UDF)。内置函数如`LEN()`、`...

    常用SQL工具存储过程与函数.rar

    了解并熟练掌握存储过程和函数的使用,对于提升SQL编程技能、优化数据库性能、确保数据安全和高效管理数据库至关重要。此外,配合日志和数据文件的管理,可以实现更可靠的数据库运维。通过深入学习这个压缩包内的...

    利用游标返回结果集的的例子(Oracle 存储过程).doc

    与函数类似,过程也打开一个游标,但这次是通过`p_cursor`参数来传递结果集,而不是直接返回。 在Java编程中,我们可以使用JDBC(Java Database Connectivity)来调用这些Oracle存储过程。在提供的Java代码示例中,...

    存储过程和函数PPT课件.pptx

    存储过程和函数是数据库管理中的重要组成部分,它们是预先编译并存储在数据库服务器上的SQL语句集合。这样的设计旨在提高效率,减少网络通信,以及提供更加模块化和复用性的数据库操作。 1. **存储过程的概念**: ...

    触发器、存储过程和函数三者有何区别四.pdf

    它们不能像存储过程那样修改数据库状态,除非是无副作用的内嵌表值函数。 **何时使用它们?** - 使用触发器的时机:当需要在数据更改时自动执行某些操作,比如强制实施复杂的业务规则或审计跟踪时。 - 使用存储过程...

    oracle pl/sql 存储过程和函数与触发器

    总之,Oracle PL/SQL中的存储过程、函数和触发器为数据库开发提供了强大的工具,它们使得数据库不仅仅是一个数据存储的地方,更是业务逻辑的执行平台。深入理解和熟练掌握这些概念,对于任何Oracle数据库管理员或...

    Oracle PL SQL存储过程以及函数编

    在PL/SQL块中,可以声明局部变量进行数据存储,也可以使用游标处理查询结果集。游标允许我们逐行处理结果,增强数据操作的灵活性。 七、异常处理 PL/SQL提供了异常处理机制,通过`EXCEPTION`关键字捕获并处理程序...

    oracle函数大全及存储过程语法.rar

    存储过程的使用能提高效率,减少网络通信,并提供封装和重用的机制。 1. 定义存储过程:使用CREATE PROCEDURE语句,定义过程名、参数和SQL语句。 2. 执行存储过程:通过EXECUTE命令或者直接调用过程名来执行。 3....

    3、mybatis存储过程和函数的调用1

    3. 存储过程返回的结果集可以直接由返回的`Map`接收。 4. 如果存储过程有返回值,需要使用`?=call procName(?,?)`的格式,并指定第一个参数为`OUT`类型的返回值。 5. 数据类型应使用大写,如`VARCHAR`,并且`output`...

    数据库函数、存储过程详解

    Sybase的存储过程则是一种存储在数据库服务器上的SQL语句集合,它可以接受参数、执行复杂操作,并可能返回结果集。存储过程有以下几个显著优点:一是提高了性能,因为它们只需编译一次,后续调用时无需再次解析;二...

    第15章_存储过程与函数.docx

    存储过程和函数能够将复杂的 SQL 逻辑封装在一起,应用程序无须关心存储过程和函数内部复杂的 SQL 逻辑,而只需要简单地调用存储过程和函数即可。 什么是存储过程? 存储过程是指预先编译的一组 SQL 语句集,将其...

Global site tag (gtag.js) - Google Analytics