工作中常需要经过一段复杂逻辑处理后,得出的一个结果集。并能够将这个结果集作为一个表看待,去进行关联查询

我一般采用建立函数function的方式来处理。

--创建包,声明function和type
CREATE OR REPLACE PACKAGE PAK_TEM
AS
TYPE DATE_RECORD IS RECORD --自定义类型-行(含字段及类型)
(
NAME VARCHAR2 (20),
VALUE VARCHAR2 (20)
); TYPE DATE_TABLE IS TABLE OF DATE_RECORD; --自定义table类 FUNCTION GET_TERM_YEARS
RETURN DATE_TABLE --返回table类型
PIPELINED; --流水式
END PAK_TEM;
/ --实现包体中的function
CREATE OR REPLACE PACKAGE BODY PAK_TEM
AS
FUNCTION GET_TERM_YEARS
RETURN DATE_TABLE
PIPELINED
IS
L_RESULT DATE_RECORD;
BEGIN
FOR REC IN (SELECT DISTINCT TO_CHAR (STATUS_TIME, 'YYYY')
FROM TEM_TB
WHERE TO_CHAR (STATUS_TIME, 'YYYY') != '')
LOOP
L_RESULT.NAME := REC.YEAR || '年';
L_RESULT.VALUE := REC.YEAR;
PIPE ROW (L_RESULT); --依次返回行
END LOOP;
END;
END PAK_TEM;
/

像查询一个表一样来操作function,使用 TABLE(自定义函数)

SELECT * FROM  TABLE(PAK_TEM.get_term_years());

PS:以下是定义oracle的table类型示例:

--oracle内置类型
TYPE STRING_TABLE IS TABLE OF VARCHAR(2000); --自定义类型(DATE_RECORD)
TYPE DATE_RECORD IS RECORD --自定义类型-行(含字段及类型)
(
NAME VARCHAR2 (20),
VALUE VARCHAR2 (20)
);
TYPE DATE_TABLE IS TABLE OF DATE_RECORD; --自定义table类(DATE_TABLE)

Oracle 函数function之返回结果集的更多相关文章

  1. oracle创建存储过程并返回结果集(附C#调用代码)

    使用存储过程中,最常用的莫过于查询数据表,并返回结果集. 在SQL SERVER 中,这类操作最简单,通过简单的select * from xx 即可完成.但是在Oracle中并不支持这种写法,那么我 ...

  2. Oracle函数function

    --function /* 函数是有返回值.-只能有一个返回值. 语法 Create or replace func1(参数) Return varchar2 As Pl/sql块 Return 'J ...

  3. Oracle 函数 Function

    定义 函数用于计算和返回一个结果值,把经常需要进行的计算写成函数,函数的调用是表达式的一部分.     函数与过程在创建的形式上有些相似,也是编译后放在内存中供用户使用.     函数必须有一个返回值 ...

  4. oracle的存储过程如何返回结果集

    CREATE OR REPLACE PACKAGE pkg_test AS     TYPE myrctype IS REF CURSOR;       PROCEDURE get (p_id NUM ...

  5. 如何用 refcursor 返回结果集

    可以通过返回 Refcursor 类型的函数,或者out 类型的函数或 procedure 返回结果集. 一.返回refcursor 类型的函数 create or replace function ...

  6. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  7. Oracle中函数/过程返回结果集的几种方式

    原文 Oracle中函数/过程返回结果集的几种方式 Oracle中函数/过程返回结果集的几种方式:    以函数return为例,存储过程只需改为out参数即可,在oracle 10g测试通过.    ...

  8. oracle函数返回结果集

    一.用自定义类型实现 1.创建表对象类型. 在Oracle中想要返回表对象,必须自定义一个表类型,如下所示: create or replace type type_table is table of ...

  9. oracle调用存储过程和函数返回结果集

    在程序开发中,常用到返回结果集的存储过程,这个在mysql和sql server 里比较好处理,直接返回查询结果就可以了,但在oracle里面 要 out 出去,就多了一个步骤,对于不熟悉的兄弟们还得 ...

随机推荐

  1. drop,truncate,delete 区别

    一.SQL中的语法 1.drop table 表名称                         eg: drop table  dbo.Sys_Test   2.truncate table 表 ...

  2. 设计模式(12)--Proxy(代理模式)--结构型

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. ...

  3. cf896C. Willem, Chtholly and Seniorious(ODT)

    题意 题目链接 Sol ODT板子题.就是用set维护连续段的大暴力.. 然鹅我抄的板子本题RE提交AC??.. 具体来说,用50 50 658073485 946088556这个数据测试下面的代码, ...

  4. React之小知识点总结

    总结react中常常被忽略的小知识点 1)即使state里设置成和之前的值一样,render也会重新渲染 2)父组件传给子组件的属性(props是只读的,在子组件中已在this.state里将属性赋值 ...

  5. jQuery操作table数据上移、下移和置顶

    jQuery 操作table中的tr换行的步骤如下: 1.获取当前tr var $tr = $(this).parents("tr"); 2.移动tr //上移 $tr.prev( ...

  6. mpvue最佳实践 , 美团出的一个小程序框架

    看手机微信,看到说美团出了1个小程序框架,  mpvue 搜下来试试,看了网上的一个对比 ----------------- 以下为引用 我们对微信小程序.mpvue.WePY 这三个开发框架的主要能 ...

  7. Windows7安装nginx后,'nginx -t -c nginx.conf' 命令出现 “could not open error log file: CreateFile() "logs/error.log" failed” 错误的原因

    网上搜索安装nginx的方法,按照步骤在 http://nginx.org/en/download.html 下载了安装包,并配置了conf/nginx.conf,将nginx的根目录添加进了环境变量 ...

  8. Android中的设计模式之观察者模式

    参考 <设计模式:可复用面向对象软件的基础 >5.7 Observer 观察者 对象行为型模式 <设计模式解析> 18.4 Observer模式 <Android源码设计 ...

  9. Node路由简单的处理

    看过node很多例子,都是将路由直接放到入口文件中处理,使得文件显得很大很乱,特别是当一个项目变大,有上百甚至上千的路由,那该怎么办? 最近在想如何将一个个的路由放到一个单独的模块中处理,比如'/us ...

  10. Sql2008R2的一个补丁BUG-大家使用时请注意

    我们都知道Sqlserver为了提高并发,允许乐观隔离级别(读提交快照,快照)以便读与写之间不阻塞.这里有一个在Sqlserver2008R2 SP2 的热补丁(CU11)下RCSI(读提交快照)隔离 ...