Oracle中的table()函数使用步骤

前段时间一直在弄报表,快被这些报表整吐了,然后接触到了Oracle的table()函数。所以今天把table()函数的具体用法整理下,防止下次遇到忘记了。。

利用table()函数,可接收输入参数,然后将pl/sql 返回的结果集代替table。由于表函数可将数据转换分阶段处理,并省去中间结果的存储和缓冲表,所以它的速度相对物理表要快很多,当然比直接查视图更是快不少。

table()函数使用步骤

  • 定义对象类型
  • 对象类型定义:封装了数据结构和用于操纵这些数据结构的过程和函数。由对象类型头、对象类型体组成

  • 对象类型头:用于定义对象的公用属性和方法;

    ①属性:最少要包含一个属性,最多包含1000个属性。定义时必须提供属性名和数据类型,但不能指定默认值和not null。并且不能包括long、long raw、rowid、urowid和PL/SQL特有类型(boolean%type%rowtype\ref curdor等);

    ② 可以包含也可以不包含方法,可以定义构造方法、member方法、static方法、map方法和order方法。

    ③ 语法

1

2

3

4

5

6

7

8

create or replace type type_name as object (

        v_name1 datatype [ ,v_name2 datatype,... ],

        [ member | static method1 spec, member | static method2 spec , ... ]

);

-- type_name是对象类型的名称;

-- v_name是属性名称;

-- datatype是属性数据类型;

-- method是方法的名称;

  • 对象类型体:用于实现对象类型头所定义的公用方法。

    ① 方法类型

方法作用说明
构造方法用于初始化对象并返回对象实例与对象类型同名的函数,默认的构造方法参数是对象类型的所有属性。(9i前只能使用系统默认的构造方法、9i后可自定义构造函数,自定义必须使用constructor function关键字)
member方法用于访问对象实例的数据当使用member方法时,可以使用内置参数self访问当前对象实例。当定义member方法时,无论是否定义self参数,它都会被作为第一个参数传递给member方法。但如果要定义参数self,那么其类型必须要使用当前对象类型。member方法只能由对象实例调用,而不能由对象类型调用。
static方法用于访问对象类型可以在对象类型上执行全局操作,而不需要访问特定对象实例的数据,因此static方法引用self参数。static方法只能由对象类型调用,不能由对象实例调用(和member相反)
map方法可以在对多个对象实例之间排序;将对象实例映射成标量数值来比较可以定义map方法,但只能有一个,与order互斥
order方法只能比较2个实例的大小定义对象类型时最多只能定义一个order方法,而且map和order方法不能同时定义

② 语法

1

2

3

4

5

6

create or replace type body type_name as

    member | static method1 body;

    member | static method1 body;...

-- type_name是对象类型的名称;

-- method是方法的名称;

-- member | static 见上表格

  • 基于对象类型的表类型

语法

1

2

3

create or replace type table_name as table of type_name;

--table_name 表类型名称

--type_name 对象类型名称

  • 定义表函数

语法

1

2

3

4

5

6

7

8

9

10

11

create or replace function function_name ([p1,p2...pn]) return table_name

as

v_test table_name := table_name();

begin

...

end loop;

return v_test;

end function_name;

-- function_name 函数名称

-- p1,p2...pn 函数入参

-- table_name 表函数名称

  • 调用表函数

语法:

1

2

3

4

select * from table(function_name(20));

或者

select * from the(select function_name(20) from dual);

--function_name 定义好的表函数名称

来源:微点阅读  https://www.weidianyuedu.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值