Oracle 函数function之返回结果集
来源:互联网 发布:极光衬肩 数据库 编辑:程序博客网 时间:2024/04/29 21:13
可以按照最后的写。
工作中常需要经过一段复杂逻辑处理后,得出的一个结果集。并能够将这个结果集作为一个表看待,去进行关联查询
我一般采用建立函数function的方式来处理。
--创建包,声明function和typeCREATE OR REPLACE PACKAGE PAK_TEMAS 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;/--实现包体中的functionCREATE OR REPLACE PACKAGE BODY PAK_TEMAS 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') != '0001') 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)
自己写的例子:
按照以上例子写的,package:
create or replace package datasTest as TYPE DATE_RECORD IS RECORD ( EMPNO number, ENAME VARCHAR2 (64) ); type DATA_TABLE is table of DATE_RECORD; -- Author : CCDSEW -- Created : 2017/8/15 9:56:28 -- Purpose : -- Public function and procedure declarations function getDates(P_empno NUMBER) return DATA_TABLE PIPELINED;end datasTest;
package body:
create or replace package body datasTestas/* TYPE DATE_RECORD IS RECORD ( EMPNO number, ENAME VARCHAR2 (64) );*//* type DATA_TABLE is table of DATE_RECORD;*/ -- Function and procedure implementations function getDates(P_EMPNO NUMBER) return DATA_TABLE PIPELINED is L_RESULT DATE_RECORD; begin FOR DATA IN (SELECT E.EMPNO,E.ENAME FROM EMP E where E.EMPNO = P_EMPNO) LOOP L_RESULT.EMPNO := DATA.EMPNO; L_RESULT.ENAME := DATA.ENAME; PIPE ROW(L_RESULT); END LOOP; end getDates;end datasTest;
测试:
select datasTest.getDates(7369) from dual;
也可以这样写(比较适合oracle):
package:
create or replace package DATATEST001 is -- Author : CCDSEW -- Created : 2017/8/15 13:26:38 -- Purpose : test -- Public type declarations TYPE DATE_RECORD IS RECORD ( EMPNO number, ENAME VARCHAR2 (64) ); type DATA_TABLE is table of DATE_RECORD; -- Public function and procedure declarations function getDates(P_empno NUMBER) return DATA_TABLE PIPELINED; end DATATEST001;
package body:
create or replace package body DATATEST001 is function getDates(P_EMPNO NUMBER) return DATA_TABLE PIPELINED is L_RESULT DATE_RECORD; begin FOR DATA IN (SELECT E.EMPNO,E.ENAME FROM EMP E where E.EMPNO = P_EMPNO) LOOP L_RESULT.EMPNO := DATA.EMPNO; L_RESULT.ENAME := DATA.ENAME; PIPE ROW(L_RESULT); END LOOP; end getDates;end DATATEST001;
测试和之前一样。
阅读全文
1 0
- Oracle 函数function之返回结果集
- jdbc调用oracle function返回结果集
- Oracle store procedure and Function返回结果集。
- Oracle中过程/函数返回结果集
- java调用ORACLE函数返回结果集
- Oracle中过程/函数返回结果集
- java 调用oracle函数返回结果集
- Oracle中过程/函数返回结果集
- ORACLE 函数返回对象类型结果集
- Oracle 中,函数如何返回结果集
- Oracle中过程/函数返回结果集
- oracle函数返回table类型结果集
- Oracle table()函数查询函数返回的结果集
- postgreSQL中function返回结果集
- C#调用ORACLE存储过程返回结果集及函数
- C#调用ORACLE存储过程返回结果集及函数
- C#调用ORACLE存储过程返回结果集及函数
- C#调用ORACLE存储过程返回结果集及函数
- 我如何选择了流行的PHP
- 安卓开发批量修改指定字符串,去除粘贴复制代码中的多余红线
- USACO Section 1.4 Mother's Milk
- AngularJs学习之路(六)
- C# 接口是否可以包含字段
- Oracle 函数function之返回结果集
- [POJ](2485)Highways ---最小生成树(图)
- HTML 你最该知道的几个知识点
- 记一次晋升答辩
- 最小代价生成树
- 阳历以及阳历的闰年
- 深入理解Spring框架(一)
- C#打印条码BarTender SDK
- USACO-Section2.1 Healthy Holsteins