在Oracle的函数中,返回表类型的语句

 更新时间:2012年10月13日 15:42:20   作者:  
在SQL Server中有表变量,可以在function中方便地返回,习惯SQL Server或者需要把脚本从SQL Server转到Oracle中的朋友可以都会碰到这个问题
Oracle的function中怎么返回表变量?

太晚了,过多的理论知识就不说了,下面简单地说实现吧!..

1、创建表对象类型。

在Oracle中想要返回表对象,必须自定义一个表类型,如下所示:
复制代码 代码如下:

create or replace type t_table is table of number;

上面的类型定义好后,在function使用可用返回一列的表,如果需要多列的话,需要先定义一个对象类型。然后把对象类型替换上面语句中的number;

定义对象类型:
复制代码 代码如下:

create or replace type obj_table as object
(
id int,
name varchar2(50)
)

修改表对象类型的定义语句如下:
复制代码 代码如下:

create or replace type t_table is table of obj_table;


2、 创建演示函数

在函数的定义中,可以使用管道化表函数和普通的方式,下面提供两种使用方式的代码:

1)、管道化表函数方式:
复制代码 代码如下:

create or replace function f_pipe(s number)
return t_table pipelined
as
v_obj_table obj_table;
begin
for i in 1..s loop
v_obj_table := obj_table(i,to_char(i*i));
pipe row(v_obj_table);
end loop;
return;
end f_pipe;

注意:管道的方式必须使用空的return表示结束.

调用函数的方式如下:
复制代码 代码如下:

select * from table(f_pipe(5));


2)、 普通的方式:
复制代码 代码如下:

create or replace function f_normal(s number)
return t_table
as
rs t_table:= t_table();
begin
for i in 1..s loop
rs.extend;
rs(rs.count) := obj_table(rs.count,'name'||to_char(rs.count));
--rs(rs.count).name := rs(rs.count).name || 'xxxx';
end loop;
return rs;
end f_normal;

初始化值后还可以想注视行那样进行修改.

调用方式如下:
复制代码 代码如下:

select * from table(f_normal(5));

ok 完成

相关文章

  • ORACLE分区表转换在线重定义DBMS_REDEFINITION

    ORACLE分区表转换在线重定义DBMS_REDEFINITION

    这篇文章主要为大家介绍了ORACLE分区表转换在线重定义DBMS_REDEFINITION表,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Oracle使用游标进行分批次更新数据的6种方式及速度比对

    Oracle使用游标进行分批次更新数据的6种方式及速度比对

    这篇文章主要介绍了Oracle使用游标进行分批次更新的5种方式及速度比对,帮助大家更好的理解和使用数据库,感兴趣的朋友可以了解下
    2020-10-10
  • oracle不支持的字符集orai18n.jar ZHS16GBK异常问题解决办法

    oracle不支持的字符集orai18n.jar ZHS16GBK异常问题解决办法

    字符集是数据库中用来表示和存储字符的编码系统,这篇文章主要给大家介绍了关于oracle不支持的字符集orai18n.jar ZHS16GBK异常问题的解决办法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • ORACLE学习笔记-新建用户及建表篇

    ORACLE学习笔记-新建用户及建表篇

    Oracle系统,即是以Oracle关系数据库为数据存储和管理作为构架基础,构建出的数据库管理系统。世界第一个支持SQL语言的商业数据库,定位于高端工作站,以及作为服务器的小型计算机,Oracle公司的整个产品线包括数据库服务器、企业商务应用套件、应用开发和决策支持工具
    2014-08-08
  • oracle用imp导入dmp文件的方法

    oracle用imp导入dmp文件的方法

    这篇文章主要介绍了oracle用imp导入dmp文件的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • rman恢复方案和oracle异机恢复

    rman恢复方案和oracle异机恢复

    这篇文章主要介绍了rman恢复方案和oracle异机恢复,需要的朋友可以参考下
    2014-03-03
  • Oracle实现同表更新或插入的三种方案

    Oracle实现同表更新或插入的三种方案

    这篇文章主要给大家介绍了Oracle实现同表更新或插入的三种方案,文章通过代码示例和图文结合讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-11-11
  • Oracle行级锁的特殊用法简析

    Oracle行级锁的特殊用法简析

    Oracle有许多的锁,各种锁的效用是不一样的。下面重点介绍Oracle行级锁,Oracle行级锁只对用户正在访问的行进行锁定。可以更好的保证数据的安全性,需要的朋友可以了解下
    2012-11-11
  • Mybatis出现ORA-00911: invalid character的解决办法

    Mybatis出现ORA-00911: invalid character的解决办法

    今天在项目中,使用Mybatis对oracle数据库进行操作的时候,报出ORA-00911: invalid character的错误,检查了一下SQL,发现都书写正确啊,复制到plsql上执行也都没问题,这什么原因呢,下面通过本文给大家解答下
    2016-12-12
  • oracle 多个字符替换实现

    oracle 多个字符替换实现

    CSDN上的一个网友,需要一个sql语句的解决方案需求是这样的求写oracle多个字符替换(有测试数据)
    2009-10-10

最新评论