数据如下图
我自己写了一个方法,但是报错,不清楚是什么原因,请各位指教
数据如下图
我自己写了一个方法,但是报错,不清楚是什么原因,请各位指教
oracle的函数,使用select的方式,只能返回"一个值",或者说一个字段。你如果想包含多个字段的信息,要么把多个字段的内容合到一个字段里去,要么就要select多次这个函数。
报错的原因正是return后只能接一个值。
正常查询from dual,无论函数写成啥样,也只能返回一行,因为dual这个表就只有一行,除非sql后面有接迭代。
你这描述的需求太奇怪了,直接查视图就行,这个日月年的参数是用来做where条件的,而不是用作数据转换的,为什么要用函数啊?能把背景描述一下么?
我觉得你可能还是没搞清楚项目经理的意思,既然你执意要所谓的多行多列,那我就写个函数把,不过我敢有很大的把握肯定这个函数用不上
create or replace package fun_getdate is
type tb is table of data_view_20211224%rowtype;
function getdate(fun_date varchar2) return tb
pipelined;
end fun_getdate;
/
create or replace package body fun_getdate is
function getdate(fun_date varchar2) return tb
pipelined is
begin
for rec in (select *
from data_view_20211224 a
where a.date_type = fun_date) loop
PIPE ROW(rec);
end loop;
RETURN;
end;
end fun_getdate;
/
select * from fun_getdate.getdate('年');
实测截图