【问题标题】:Return Associative Array from Oracle Function从 Oracle 函数返回关联数组
【发布时间】:2015-09-05 12:35:04
【问题描述】:

我想知道当返回值是下面代码中的关联数组时,函数返回应该是什么数据类型:

create or replace FUNCTION GET_DAYS 
(
  DAY_IDS IN VARCHAR2 ,
  FromDate IN Date,
  Todate IN Date
) RETURN split_tbl /*SYS.ODCINUMBERLIST*/ AS 
BEGIN
DECLARE
D_LIST split_tbl;
TYPE weekdays IS TABLE OF number INDEX BY PLS_INTEGER;
D_Date split_tbl:=split_tbl();
j number:=1;
m number:=1;
K NUMBER:=1;
weeks number:=1;
t_weeks number:=0;
u number;
wday char(3);
f_date date:=fromdate;
BEGIN

D_LIST := SPLIT2(DAY_IDS);

WHILE j <= D_LIST.count loop
 u:=nvl(d_list(j),0);

select count(*) into m from days where (day_id)=u;
if m=1 then
select day into wday from days where (day_id)=u;

  t_weeks:=(next_day(To_date(todate,'DD-Mon-RRRR'),wday)-next_day(To_date(f_date,'DD-Mon-RRRR'),wday))/7;
   while (next_day(To_date(todate,'DD-Mon-RRRR'),wday)-next_day(To_date(f_date,'DD-Mon-RRRR'),wday))/7 >=1 
 loop
d_date.extend(nvl(t_weeks,0));
 D_DATE(K):=to_char(weeks);
f_date:=f_date+7;
 weeks:=weeks+1;
 K:=K+1;
 end loop; 

  end if; 
    j:=j+1;
   END loop;
K:=0;
/*
while k<=d_date.count loop
d_date.extend(2000);

if(d_date(K)=null) then

d_date.delete(K);
end if;
end loop;
*/
  RETURN D_Date;
  END;
END GET_DAYS;

我已经在使用由 varchar2 创建的关联数组 D_List,但我需要它的数量。

【问题讨论】:

  • 什么是接收部分。默认情况下,php oci8 会执行此操作。您也可以使用 sys_refcursor 或CREATE OR REPLACE TYPE CUST_OBJ AS OBJECT (/* list of variables eg. myid number, myval varchar2(255) etc. */); CREATE OR REPLACE TYPE OBJ_TBL IS TABLE OF CUST_OBJ; 之类的用户类型。然后使用oci,制作OBJ_TBL的自定义集合,绑定它,运行查询并获取结果。
  • 函数有什么作用?该函数的一些示例输入和您的预期输出是什么?您是否尝试过返回SYS.ODCINUMBERLIST(并将D_DATE 改成那种类型)? SPLIT2 函数有什么作用?
  • split2 是另一个在 varchar2 中返回关联数组的函数
  • 你的函数是做什么的?什么进去,你期望出来什么?
  • 我只想返回包含第 1,2,3 周的数组 ...

标签: oracle


【解决方案1】:

我问了好几次“你的函数是做什么的?”唯一的答案是:

我只想返回包含第 1、2、3 周的数组

所以这里有一个函数,它返回一个包含 1,2,3 的数组

SQL Fiddle

Oracle 11g R2 架构设置

CREATE FUNCTION get_days
RETURN SYS.ODCINUMBERLIST
AS
  days SYS.ODCINUMBERLIST;
BEGIN
  days := SYS.ODCINUMBERLIST( 1, 2, 3 );
  RETURN days;
END;
/

查询 1

SELECT *
FROM   TABLE( get_days )

Results

| COLUMN_VALUE |
|--------------|
|            1 |
|            2 |
|            3 |

【讨论】:

  • 我自己的函数运行良好,因为我从你的答案中得到了语法:select * from table(get_days('3:4','01-Sep-2015','30-DEC-2015' ))
  • 还想知道我得到空值作为必须扩展数组。如何摆脱它。
  • 提出一个新问题并给出你编写的函数、你输入的输入和预期的输出——如果你在新问题中提供所有这些信息,你应该找人帮忙.请勿编辑此问题,因为它会破坏对有类似问题的人的任何价值,并且不太可能被许多人看到,因为它是一个老问题(已回答)。
  • 有问题限制。
猜你喜欢
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 2012-09-02
相关资源
最近更新 更多