2016-08-18 116 views
0

我已經創建瞭如下proc從一個表中讀取所有數據並以.net形式將其填充到網格中。oracle批量收集和讀取數據

CREATE OR REPLACE PROCEDURE EVMPDADM.GETALLBATCHES_ARTICLE_57(p_batchstatus OUT XEVMPD_SUBMITTEDBATCH%ROWTYPE) 
IS 

TYPE batch_status IS TABLE OF XEVMPD_SUBMITTEDBATCH%ROWTYPE INDEX BY PLS_INTEGER; 
l_batchstatus batch_status; 

BEGIN 

SELECT * BULK COLLECT INTO l_batchstatus FROM XEVMPD_SUBMITTEDBATCH ; 

    FOR i IN 1..l_batchstatus.count LOOP 

    p_batchstatus:= l_batchstatus(i); 

    END LOOP; 

END GETALLBATCHES_ARTICLE_57; 

要測試PROC運行正常我嘗試用下面的PL-SQL塊打印數據:

DECLARE 
    v_batchstatus XEVMPD_SUBMITTEDBATCH%ROWTYPE; 
    BEGIN 

    EVMPDADM.GETALLBATCHES_ARTICLE_57(v_batchstatus); 
    DBMS_OUTPUT.PUT_LINE(v_batchstatus.Batch_id || ' ' || v_batchstatus.BATCH_DESCRIPTION || ' ' || v_batchstatus.STATUS || ' ' ||v_batchstatus.RECORD_STATUS || ' ' ||v_batchstatus.NUMBER_OF_RECORDS); 

    END; 
/

但是從這個過程中,我只得到了最後一排。 我想打印表中的所有記錄。 任何人都可以幫助我找出上述代碼中的錯誤。

+0

首先,您的程序將只返回您提取的任意最後一行的數據。您似乎不太可能想要生成結果集並獲取數據僅用於丟棄除一行之外的所有數據,並且您不關心保留哪一行。其次,你不能將'%rowtype'變量傳遞給'dbms_output.put_line'。您可以傳遞特定的標量屬性,即'dbms_output.put_line(v_batchstatus.col1 ||''|| v_batchstatus.col2 || ...);'但您必須枚舉您想要查看的屬性。 –

回答

0

錯誤消息非常明顯。您打電話給您的程序:

  1. 錯誤的參數數EVMPDADM.GETALLBATCHES_ARTICLE_57:它有一個OUT參數。所以你需要傳遞這個參數。
  2. 錯誤的參數類型DBMS_OUTPUT.PUT_LINE:它有一個IN VARCHAR2參數,而不是XEVMPD_SUBMITTEDBATCH%ROWTYPE。閱讀here

所以,它應該是這樣的:

DECLARE 
    v_batchstatus XEVMPD_SUBMITTEDBATCH%ROWTYPE; 
    BEGIN 

    v_batchstatus:= EVMPDADM.GETALLBATCHES_ARTICLE_57(v_batchstatus); 
    --use DBMS_OUTPUT.PUT_LINE for every column of XEVMPD_SUBMITTEDBATCH separately after you convert them to varchar2 if they are not. 

END; 
/

此外,程序這樣只會返回最後一行。所以你可能想改變它。

如果你想從表打印所有的記錄,你需要添加DBMS_OUTPUT.PUT_LINE在循環中,它會變成這個樣子:

FOR i IN 1..l_batchstatus.count LOOP 

p_batchstatus:= l_batchstatus(i); 

dbms_output.put_line(p_batchstatus.col1 || ' ' || p_batchstatus.col2 || ...); 

END LOOP; 

col1, col2, ...給出的XEVMPD_SUBMITTEDBATCH的列名,他們是類型VARCHAR2。或者您將需要額外的處理

+0

我已更正pl-sql塊。這是我的錯誤,我忘了正確處理輸出參數,並且在打印時沒有使用屬性名稱。 – Jig232

+0

我已經更新了這個問題。你能告訴我如何打印表格中的所有記錄嗎? – Jig232

+0

謝謝鷹:) 其實問題是我想所有的數據作爲一個輸出參數,因爲我們想以一個.NET形式在網格視圖中顯示這個數據 我不知道.NET,我不知道如何我的隊友會將這些數據顯示爲網格。他只是要求我編寫proc來讀取數據並將其作爲輸出參數發送。 – Jig232