2015-07-03 12 views
0

我有一個用戶類型RECORD和A 用戶類型TABLE第一類:PL/SQL:無法將表ROWTYPE轉換爲用戶定義的TYPE TABLE。但是,沒有錯誤給出

TYPE ObjData IS RECORD (
    Test date NOT NULL := DATE '0001-01-01', 
    Val decimal 
); 
TYPE ObjDataCollection IS TABLE 
    OF ObjData; 

我需要從包通過調用PROCEDURE作爲一個PARAM對象ObjDataCollection,從一個DbTable牽強:

SELECT LogDate, TypeVal FROM UserLogs 

當我致電查詢時,它會返回幾十個

CREATE FUNCTION TestData RETURN MyPackage.ObjDataCollection AS 
    res MyPackage.ObjDataCollection; 
BEGIN 
    SELECT LogDate, TypeVal 
    BULK COLLECT INTO res 
    FROM UserLogs 
    ORDER BY LogDate; 
    RETURN res; 
END TestData; 

這是運行窗口登錄:

Connecting to the database MYDB. 
Process exited. 
Disconnecting from the database MYDB. 

這是輸出變量窗口(它是空的): Screenshot

+4

打開遊標後,在第一個'fetch'之前,'%rowcount'屬性爲零。所以你的'IF'條件總是錯誤的。 –

+0

是的,嘗試給函數中的'else'條件。你會知道它是否會去那裏 – Crazy2crack

+1

你打電話過程如何?現在看起來問題是您的未知GUI不顯示您期望的數據。或者表格實際上並沒有你認爲它的數據。 –

回答

0

記錄,但沒有被這個功能我想返回遊標的%ROWCOUNT屬性告訴您到目前爲止已獲取了多少行,而不是可以獲取多少行。因此在提取數據之前檢查%ROWCOUNT是一個錯誤。這將始終返回0.

在這種情況下,您的IF聲明是不必要的。我也懶得定義一個遊標變量,只是

CREATE FUNCTION TestData 
    RETURN MyPackage.ObjDataCollection 
AS 
    res MyPackage.ObjDataCollection; 
BEGIN 
    SELECT LogDate, TypeVal 
    BULK COLLECT INTO res 
    FROM UserLogs 
    ORDER BY LogDate; 

    RETURN res; 
END; 
+0

我試過你的答案,但仍然無法正常工作。 – kpull1

+0

@ kpull1 - 定義「不工作」。你有錯誤嗎?如果是這樣,有什麼錯誤?我的水晶球現在在商店裏。 –

+0

我在這個問題中提供了更多信息(空輸出,沒有錯誤日誌) – kpull1

相關問題