时间:2023-10-31来源:系统城装机大师作者:佚名
在使用Oracle数据过程中,函数是非常好用的,我们经常定义一个函数用来处理相同的相似的问题的结果。
通常我们使用函数返回的都是单独的值,可能是NUMBER,也可能是VARCHAR类型,其实使用函数也可以返回类似于表结构数据的形式的数据集。
最常用的是游标的方式,其次是Table的形式,最后又产生了管道的方式。管道的方式与前两者不同的地方有它可以不用返回值,即RETURN后不用接内容,它是一行一行的返回数据。Table和管道的方式在调用时都是通过'TABLE()'关键字将函数的返回内容仿真成一个数据集。
(1)创建函数
1 2 3 4 5 6 7 8 9 |
CREATE OR REPLACE FUNCTION FN_R_REFCUR(P_VALUE IN VARCHAR2) RETURN SYS_REFCURSOR IS C_EMPNO SYS_REFCURSOR; BEGIN OPEN C_EMPNO FOR SELECT NAME ,ADDR FROM EMP WHERE ADDR=P_VALUE; RETURN (C_EMPNO); END ; / |
(2)调用函数
1 | SELECT FN_R_REFCUR( 'Raphael' ) FROM DUAL; |
(1)创建函数
--定义一个行类型
1 | CREATE OR REPLACE TYPE TYPE_TTEMP_ROW AS OBJECT( NAME VARCHAR2(10), ADDR VARCHAR2(20)); |
--定义一个表类型
1 | CREATE OR REPLACE TYPE TYPE_TEMP_TABLE AS TABLE OF TYPE_TTEMP_ROW; |
--创建函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
CREATE OR REPLACE FUNCTION FN_R_TAB (P_VALUE IN VARCHAR2) RETURN TYPE_TEMP_TABLE IS TEMP_ROW TYPE_TTEMP_ROW; -- 定义单行 TEMP_TABLE TYPE_TEMP_TABLE := TYPE_TEMP_TABLE(); -- 定义返回结果,并初始化 BEGIN FOR CURROW IN ( SELECT NAME , ADDR FROM EMP WHERE NAME =P_VALUE) -- 查询名字是参数的值的结果 LOOP TEMP_ROW := TYPE_TTEMP_ROW(CURROW. NAME , CURROW.ADDR); -- 获得一行 TEMP_TABLE.EXTEND; -- 表类型增加一行(EXTEND就是扩展的意思,相当于增加一行数据空间) TEMP_TABLE(EMP_TABLE. COUNT ) := TEMP_ROW; -- 一行放进去 END LOOP; RETURN (TEMP_TABLE); END ; / |
(2)调用函数
1 | SELECT * FROM TABLE (FN_R_TAB( 'Raphael' )); |
(1)创建函数
--定义一个行类型
1 | CREATE OR REPLACE TYPE TYPE_TTEMP_ROW AS OBJECT( NAME VARCHAR2(10), ADDR VARCHAR2(20)); |
--定义一个表类型
1 | CREATE OR REPLACE TYPE TYPE_TEMP_TABLE AS TABLE OF TYPE_TTEMP_ROW; |
--创建函数
1 2 3 4 5 6 7 8 9 10 11 12 |
CREATE OR REPLACE FUNCTION FN_R_PIP(P_VALUE IN VARCHAR2) RETURN TYPE_TEMP_TABLE PIPELINEDIS TEMP_ROW TYPE_TTEMP_ROW; --定义一个行对象类型变量 BEGIN FOR CURROW IN ( SELECT NAME , ADDR FROM EMP WHERE NAME =P_VALUE) -- 查询名字是参数值的结果 LOOP TEMP_ROW := TYPE_TTEMP_ROW(CURROW. NAME , CURROW.ADDR); -- 获得一行 PIPE ROW (TEMP_ROW); -- 返回一行 END LOOP; RETURN ; -- 这里返回没有值 END ; / |
(2)调用函数
1 | SELECT * FROM TABLE (FN_R_PIP( 'Raphael' )); |
官网地址:Oracle | Cloud Applications and Cloud Platform
到此这篇关于Oracle function函数返回结果集的3种方法的文章就介绍到这了
2023-10-31
Oracle如何编写一个sqlldr实例2023-10-31
Oracle的SQLLDR用法简介2023-10-31
Oracle中的高效SQL编写PARALLEL解析1.Oracle数据库系统结构概述 2.Oracle数据库存储结构 物理存储结构 控制文件 数据文件 重做日志文件 归档日志文件 Oracle数据库逻辑结构 数据块(Data Block) (盘)区(Extent) 段(Segment) 表空间(Tablespace) 本地管...
2023-10-31
windows下的Oracle19c 一、官网下载Oracle19c数据库 二、安装Oracle数据库 1.解压安装包 2.运行setup.exe安装 三、配置 四、安装完Oracle数据库,给scott用户解锁 1.解决Oracle数据库中没有scott账户的问题 2.给scott...
2023-10-31