ORACLE 表函数实现

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));

时间: 2024-12-18 16:52:04

ORACLE 表函数实现的相关文章

Oracle组函数、多表查询、集合运算、数据库对象(序列、视图、约束、索引、同义词)等

count组函数:(过滤掉空的字段) select count(address),count(*) from b_user max() avg() min(),sum() select sum(age),max(age),min(age),avg(nvl(age,0)) from b_user 1       260     70      10      37.1428571428571 group by:如果前面定义了该字段名  则groupby必须也写上该字段 select name,pw

数据库编程1 Oracle 过滤 函数 分组 外连接 自连接

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <大纲> 数据库编程1 Oracle 过滤 函数 分组 外连接 自连接 本文实验基于的数据表: winsows安装好Oracle11g之后,开始实验 SQLplus 登陆 ORacle sqlplus 退出的方式 查看用户之下有什么表 查看表的所有记录,不区分大小写 设置SQLplus行宽,页宽,列宽: 清屏命令 select as 语法 1,as别名的使用 2,没有引号带有空格的别名,无法识别: 3,带有

数据库编程2 Oracle 过滤 函数 分组 外连接 自连接

[本文谢绝转载原文来自http://990487026.blog.51cto.com] 续:数据库编程1 Oracle 过滤 函数 分组 外连接 自连接 where like模糊查询,查询员工姓名是4个字母 SQL> select * from emp where ename like '____';      EMPNO ENAME                JOB                       MGR HIREDATE          SAL       COMM    

Oracle常用函数

前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使用: 往emp表中插入一条记录: SQL> insert into emp values(1234,'LIZELU','BOSS',1234,'1980-12-06',10000.0,0,30); insert into emp values(1234,'LIZELU','BOSS',1234,'1

oracle 时间函数

加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add_months(sysdate,1) from dual; --加1月 select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期 select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from

Oracle 的函数

Oracle 的函数 分类 单行函数:  对每一行输入值进行计算,得到相应的计算结果,返回给用户,也就是说, 每一行作为一个输入参数,通过函数计算得到每行的计算结果.比如说length 多行函数:对多行输入值进行计算,得到多行对应的多个结果,比如max,min等 单行函数 字符函数: 用于处理字符的业务   replace(char 1,search_string,replace_string) 举例: 在emp表中的ename列中替换所有的A select replace(ename,'A',

Oracle表复杂查询

Oracle表复杂查询 聚合函数 max(字段值)  -- 求最大值 min(字段值)  -- 求最小值 sum(字段值)  -- 求总和 avg(字段值)  -- 求平均值 count(字段值)  -- 求个数 group by 和 having 字句 group by :  用于对查询的结果分组统计 having 子句:用于过滤分组显示的结果   案例: 1.显示每个部门的平均工资和最高工资?   select avg(sal),max(sal) from emp group by dept

oracle 常用函数积累

这些天的工作很多都是围绕着oracle函数来展开的,这里来总结一下这些天在工作中使用过的函数.其实也算不上总结,就是把这些日子对于oracle的使用做一个简单的知识罗列. 以管道化表函数方式返回数据 --创建指定数据类型的对象 create type row_typedepluju as object (rootid NUMBER(19),projectid NUMBER(19)); --创建指定数据类型的对象table create type table_typedepluju as tabl

oracle表连接

oracle表连接又被问到了,感觉细节了解还是远远不够啊,从网上找资料学习之.转载的. 在查看sql执行计划时,我们会发现表的连接方式有多种,本文对表的连接方式进行介绍以便更好看懂执行计划和理解sql执行原理. 一.连接方式:         嵌套循环(Nested  Loops (NL))       (散列)哈希连接(Hash Join (HJ))     (归并)排序合并连接(Sort Merge Join (SMJ) ) 二.连接说明:     1.Oracle一次只能连接两个表.不管查