`
thomas01042003
  • 浏览: 15261 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle 数据库函数 返回数据集合

 
阅读更多
关于oracle的plsql Pipelined pipe row的用法(转) 为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成。REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行具体化。Oracle 9i 通过引入的管道化表函数纠正了后一种情况。表函数是返回整个行的集(通常作为一个集合)的函数,可以直接从 SQL 语句中进行查询,就好像它是一个真正的数据库表一样。管道化表函数与之相似,但是它像在构建时一样返回数据,而不是一次全部返回。管道化表函数更加有效,因为数据可以尽可能快地返回。
管道化表函数必须返回一个集合。在函数中,PIPE ROW 语句被用来返回该集合的单个元素,该函数必须以一个空的 RETURN 语句结束,以表明它已经完成。一旦我们创建了上述函数,我们就可以使用 TABLE 操作符从 SQL 查询中调用它。
管道化表函数经常被用来把数据从一种类型转化成另一种类型。
下面是用 Pipelined Table 实现 split 函数的例子:
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split PIPELINED
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
BEGIN
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);
WHILE j < len
LOOP
j := INSTR (p_str, p_delimiter, i);
IF j = 0
THEN
j := len;
str := SUBSTR (p_str, i);
PIPE ROW (str);
IF i >= len
THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + len1;
PIPE ROW (str);
END IF;
END LOOP;
RETURN;
END fn_split;
/
测试:SELECT * FROM TABLE (fn_split ('1;;12;;123;;1234;;12345', ';;'));
结果:
1
12
123
1234
12345
又一个简单的例子:CREATE TYPE mytype AS OBJECT (
field1 NUMBER,
field2 VARCHAR2 (50)
);
CREATE TYPE mytypelist AS TABLE OF mytype;
CREATE OR REPLACE FUNCTION pipelineme
RETURN mytypelist PIPELINEDIS
v_mytype mytype;
BEGIN
FOR v_count IN 1 .. 20
LOOP
v_mytype := mytype (v_count, 'Row ' || v_count);
PIPE ROW (v_mytype); END LOOP;
RETURN;
END pipelineme;
SELECT * FROM TABLE (pipelineme);
FIELD1 FIELD2
------ ------------------------
1 Row 1
2 Row 2
3 Row 3
4 Row 4
5 Row 5
6 Row 6
7 Row 7
8 Row 8
9 Row 9
10 Row 10
11 Row 11
12 Row 12
13 Row 13
14 Row 14
15 Row 15
16 Row 16
17 Row 17
18 Row 18
19 Row 19
20 Row 20

分享到:
评论
1 楼 thomas01042003 2012-02-23  
Oracle函数返回Table集合

   在实际的应用中,为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成。REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行具体化。 9i 通过引入的管道化表函数纠正了后一种情况。表函数是返回整个行的集(通常作为一个集合)的函数,可以直接从 SQL 语句中进行查询,就好像它是一个真正的数据库表一样。管道化表函数与之相似,但是它像在构建时一样返回数据,而不是一次全部返回。管道化表函数更加有效,因为数据可以尽可能快地返回。

    管道化表函数必须返回一个集合。在函数中,PIPE ROW 语句被用来返回该集合的单个元素,该函数必须以一个空的 RETURN 语句结束,以表明它已经完成。一旦我们创建了上述函数,我们就可以使用 TABLE 操作符从 SQL 查询中调用它。



1.使用自定义类型

/* Formatted on 2010/02/26 08:42 (Formatter Plus v4.8.8) */

CREATE OR REPLACE TYPE objemp AS OBJECT (

   maxsal   NUMBER,

   minsal   NUMBER

);





/* Formatted on 2010/02/26 08:43 (Formatter Plus v4.8.8) */

CREATE OR REPLACE TYPE tabemp AS TABLE OF objemp;



2.使用Pipeline管道函数和Pipe row()

CREATE OR REPLACE FUNCTION getmaxminsalary (department NUMBER)

   RETURN tabemp PIPELINED

AS

   maximum_salary   NUMBER;

   minimum_salary   NUMBER;

   v_errorcode      NUMBER;

   v_errortext      VARCHAR2 (200);

   v                objemp;

BEGIN

   FOR myrow IN (SELECT MAX (sal) m_sal, MIN (sal) min_sal

                   FROM emp

                  WHERE deptno = departmnet)

   LOOP

      v := objemp(myrow.m_sal, myrow.min_sal);

      PIPE ROW (v);

   END LOOP;



   RETURN;

EXCEPTION

   WHEN OTHERS

   THEN

      v_errorcode := SQLCODE;

      v_errortext := SUBSTR (SQLERRM, 1, 200);



      INSERT INTO log_table

                  (code, MESSAGE, info

                  )

           VALUES (v_errorcode, v_errortext, 'getMaxMinSalary'

                  );

END;

3.使用Table操作符

SELECT * FROM TABLE(getMaxMinSalary(10));

相关推荐

    oracle数据库函数大全集合

    Oracle 数据库函数大全集合是一个非常全面的函数集合,包含了多种常用的函数,以下是对每个函数的详细介绍: 1.ASCII 函数 ASCII 函数返回与指定的字符对应的十进制数。例如,SQL&gt; select ascii('A') A,ascii('a'...

    SQL和Oracle数据库函数说明

    在IT领域,数据库是数据管理和存储的核心工具,而SQL(结构化查询语言)和Oracle数据库则是其中的佼佼者。SQL是用于管理关系型数据库的标准语言,而Oracle数据库则是一种功能强大的关系数据库管理系统,广泛应用于...

    Oracle数据库常用sql语句的分类和常用函数.docx

    以上内容总结了Oracle数据库中常用的SQL语句及函数,涵盖了数据库的基本操作、数据管理、数据定义和查询等方面。对于初学者来说,掌握这些基础是非常重要的。希望这份指南能够帮助大家更好地理解和应用Oracle数据库...

    oracle数据库函数

    根据提供的文件信息,我们可以深入探讨Oracle数据库中的各种实用函数及其应用。这些函数广泛应用于数据处理、文本操作等方面,是进行高效数据库查询与管理的重要工具。 ### 1. UNION 和 UNION ALL - **UNION**: ...

    Oracle 数据库的常用函数列表一览

    这些函数只是Oracle数据库庞大函数库的一部分,还有更多如游标、递归、集合操作等高级特性等待开发者探索。了解并熟练运用这些函数,能大大提高数据库管理的效率和灵活性,使得数据处理更加精确和便捷。在实际应用中...

    数据库开发 Oracle数据库 SQL开发教程 全套PPT课件 共20个章节.rar

    数据库开发 Oracle数据库 SQL开发教程 第08章 集合运算(共20页).pdf 数据库开发 Oracle数据库 SQL开发教程 第09章 高级子查询(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第0章 开篇概述(共14页).pdf ...

    oracle数据库基础知识

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,它在企业级数据存储和管理中扮演着核心角色。Oracle数据库基础知识是每个IT从业者或自学者必备的知识领域。以下将深入讲解Oracle数据库的一些关键概念和操作...

    Oracle数据库学习课件

    1. **Oracle数据库基础**:首先,你会了解到数据库的基本概念,如数据模型(层次、网络、关系)、关系数据库理论,以及Oracle数据库系统的特点和优势。此外,还会介绍Oracle数据库的安装、配置和初始化过程。 2. **...

    Oracle数据库维护常用SQL语句集合

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级应用中占据着重要的地位。进行Oracle数据库维护,掌握一些常用的SQL语句是必不可少的。本文将深入探讨Oracle数据库维护中的核心SQL语句,帮助你更...

    关于Oracle数据库的一些基础知识

    一、Oracle数据库函数大全 Oracle数据库支持丰富的函数,用于处理各种数据类型和执行复杂的计算。以下是一些常见的函数类别: 1. 数学函数:如`ROUND()`用于四舍五入,`SQRT()`用于求平方根,`MOD()`用于取模运算...

    Oracle数据库指南.pdf

    从文档内容中可以看出,Oracle数据库提供了丰富的内置函数,这些函数可以被开发者用来执行复杂的数据处理和计算任务。函数的使用是编写有效SQL语句的关键部分,也是构建复杂数据库查询的基础。 Oracle数据库还提供...

    Oracle数据库培训.ppt

    模式对象是 Oracle 数据库中的数据库对象的集合,包括表、视图、序列、存储过程、索引、聚簇、同义词、数据库联结等。 数据块是 Oracle 数据库中的基本存储单元,用于存储数据。范围段是 Oracle 数据库中的逻辑存储...

    oracle数据库操作手册

    - **数据库实例与数据库**:Oracle数据库实例是内存结构和后台进程的集合,用于处理数据库的请求,而数据库是实际存储数据的物理结构。 - **表空间与数据文件**:表空间是存储数据库对象(如表、索引等)的逻辑...

    Java调用oracle函数返回oracle类(类似)集合

    在Java中调用Oracle函数并处理返回的Oracle特定数据类型,如集合或索引表,通常涉及到Oracle的PL/SQL包和Java的JDBC驱动。以下是对这个主题的详细说明: 1. **Oracle索引表类型**: Oracle索引表是一种PL/SQL数据...

    ORACLE函数大全 .doc

    ORACLE 函数大全是一个强大的数据库函数集合,提供了多种字符串操作、数字操作、日期操作等功能。本文档将详细介绍 ORACLE 函数大全中的各个函数,包括 ASCII、CHR、CONCAT、INITCAP、INSTR、LENGTH、LOWER、UPPER、...

    Oracle常用函数集合

    以下是对"Oracle常用函数集合"的详细解析: 1. **数值函数**:Oracle提供了多种处理数字的函数,如`ROUND()`用于四舍五入,`TRUNC()`用于截断小数,`MOD()`计算余数,`DECODE()`用于条件判断,以及`POWER()`和`SQRT...

    oracle数据库系统应用与开发

    Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统之一,它为数据存储、管理和处理提供了高效、安全和可扩展的解决方案。对于初学者来说,理解Oracle数据库系统应用与开发的基础至关重要,这将帮助他们掌握...

    张立国oracle数据库教程

    在这里,读者将了解到数据库是如何存储、组织和检索数据的,并对Oracle数据库系统有一个初步的认识。 第二章“Oracle数据库入门”则引导读者进入Oracle的世界,介绍如何安装和配置Oracle环境,创建并连接到数据库...

    Oracle数据库设计文档——帮助数据库初学者了解数据库设计

    总的来说,Oracle数据库设计是一门深奥但实用的技术,它涉及到业务理解、数据建模、SQL语法、存储结构等多个方面。只有深入理解和熟练掌握这些知识点,才能设计出满足业务需求且高效运行的数据库系统。希望这份文档...

Global site tag (gtag.js) - Google Analytics