2015-09-05 96 views
1

我想知道應該在函數返回什麼數據類型時,返回值是在下面的代碼關聯數組:返回關聯數組

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; 

我已經使用關聯數組D_List已經創建了varchar2,但我需要它的數量。

+0

什麼是接收部分。 PHP的oci8默認做到這一點。你也可以使用sys_refcursor或像CREATE OR REPLACE TYPE CUST_OBJ AS OBJECT這樣的用戶類型(/ *變量列表,如myid number,myval varchar2(255)等)。創建或替換類型OBJ_TBL是CUST_OBJ;'的表。然後使用oci,製作'OBJ_TBL'的自定義集合,綁定它,運行查詢和獲取結果。 – Cunning

+0

該功能有什麼作用?函數的一些示例輸入和您的預期輸出是什麼?你有沒有試過返回'SYS.ODCINUMBERLIST'(並將'D_DATE'確定爲該類型)? 「SPLIT2」功能有什麼作用? – MT0

+0

split2是返回varchar2中的關聯數組的另一個函數。 –

回答

2

我問了好幾次「你的函數做了什麼?」而唯一的答案是:

我只是想返回數組包含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 | 
+0

我自己的函數工作得很好,因爲我得到的語法從你的答案如下:select * from table(get_days('3:4','01-Sep-2015','30 -DEC-2015')) –

+0

也想知道我得到null值,因爲必須擴展陣列。如何擺脫它。 –

+0

提出一個新問題,並給出你寫的函數,你輸入的輸入和期望的輸出 - 如果你在新問題中提供所有信息,你應該找人幫忙。不要編輯這個問題,因爲它會破壞具有類似問題的人的任何價值,並且不可能被許多人看到,因爲這是一箇舊的(並且已回答的)問題。 – MT0

相關問題